CaptainChen

实验室挂代理宿舍免费上网折腾小记

2017-02-21 1135 words (about 5 min read) Views
代理 网络 路由器

大学的网费还是比较贵的,自从研究生进入实验室后发现,实验室网段属于校园网的白名单,也就是说流量不计费。正好实验室主机安装了 Linux 系统,搭建一个代理服务,校园网连接使用不就免流量了么。

比较简单的方式是搭建一个 L2TP / IPsec-vpn 或者 shadowsocks 服务。

服务端平台: Ubuntu 16.04
客户端平台: macOS

1. L2TP / IPsec 服务搭建

1.1 获取公网 IP 和端口转发

实验室采用静态 IP,因此,进入路由器后台即可知道实验室网络公网 IP 地址。

由于 L2TP / IPsec 服务需要占用 500 和 4500 udp 端口,因此,我们首先要在路由器后端开放这两个端口。以 Padavan 固件为例 (其他路由器系统类似),在端口转发里添加如下规则:

服务名称 源IP地址 端口范围 内网IP 本地端口 协议
udp500 *.*.*.* 500 主机局域网IP 500 Both
udp4500 *.*.*.* 4500 主机局域网IP 4500 Both

1.2 L2TP / IPsec 服务

最简单的 L2TP / IPsec VPN 搭建还是用 docker 比较方便。
首先创建一个 env 文件存储 PSK 密钥、用户名和密码,该文件如下填写:

VPN_IPSEC_PSK=自定义 PSK 密钥
VPN_USER=自定义用户名
VPN_PASSWORD=自定义密码

使用 hwdsl2/ipsec-vpn-server 镜像搭建服务:

docker run \
    --name ipsec-vpn-server \
    --env-file ./vpn.env(替换为自己的 env 文件路径) \
    --restart=always \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -d --privileged \
    hwdsl2/ipsec-vpn-server

上面 --restart=always 保证了服务开机、失败后自启动。

1.2 macOS 客户端设置

进入 设置 -> 网络,点击左下角的加号 +, 添加新的 VPN 连接:

在认证连接里面,用户认证的密码对应于上面的 VPN_PASSWORD,机器认证的密码对应于 VPN_IPSEC_PSK

记得在高级选项里面勾选通过VPN连接发送所有流量,不然 VPN 连接后并不会进行流量转发,比较坑爹。

这时候点击连接后即可连上 VPN 免费上网了。建议设置里面勾选在菜单栏中显示VPN状态,方便在任务栏一键连接 VPN 并实时查看连接状态。

L2TP / IPsec VPN 的一个特点是,网络波动掉线后并不会重连,每次在电脑手动重连 VPN 还是比较麻烦的,因此我们可以利用 AppleScript 写一个脚本,实现掉线自动重连:

打开脚本编辑器,选择语言类型为 AppleScript,填入如下脚本:

on idle
	tell application "System Events"
		tell current location of network preferences
			set myConnection to the service "VPN (L2TP)"
			if myConnection is not null then
				if current configuration of myConnection is not connected then
					connect myConnection
				end if
			end if
		end tell
		return 30
	end tell
end idle

上面 set myConnection to the service 后对应的系统设置里面 VPN 连接的名字,默认是 VPN (L2TP),注意这里括号前有一个空格。

填写完毕后存储为应用程序即可,如下图所示:

双击保存的 app 后即会自动掉线重连 VPN。

2 Shadowsocks 服务搭建

shadowsocks 的搭建就比较简单了,这里安装 Python 版的 shadowsocks 服务:

sudo pip install shadowsocks

新增配置文件,以新增 /etc/shadowsocks.json 为例,里面填写:

{
    "server":"::",
    "local_address":"127.0.0.1",
    "local_port":6153,
    "timeout":300,
    "method":"rc4-md5",
    "server_port":443,
    "password":"password",
    "fast_open":false
}

server填写 "::" 可以同时转发 ipv4 和 ipv6。考虑到我服务端本地还要运行一个 shadowsocks client 实例,因此为了避免冲突,local_port 不选 1080,而是随便选了一个 6153 端口。另外,为了提高性能,加密方式选用 rc4-md5。由于这里服务端开启了 443 端口,因此路由器记得开放 443 端口转发权限。

开启 shadowsocks 服务:

sudo ssserver -c /etc/shadowsocks.json -d start

可以利用 systemctl 添加一个开机自启动服务,使 ss 时刻后台运行。在 etc/systemd/system 下创建 ss.service 文件,内容填写:

[Unit]
Description=shadowsocks server
After=network.target

[Service]
Type=simple
Restart=always

ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks.json

[Install]
WantedBy=multi-user.target

执行以下两条指令使服务生效:

sudo systemctl enable ss.service
sudo systemctl start ss.service

客户端中随便一个 ss 客户端填入对应的 IP、端口、加密方式、密码就 OK 了。以 Surge 为例,填写以下配置就行:

代理名称 = ss, 公网 IP, 443, encrypt-method=rc4-md5, password=password

千兆带宽下蹭网就是爽哈哈哈~

如果你这里看到有广告,不妨点击一下,就是对本站最大的支持~



本文由 CaptainChen 创作
该文章采用 知识共享署名-非商业性使用 4.0 国际许可协议进行许可。转载请注明出处!
CopyRight © 2017 - 2020
本站已稳定运行 天 总访问量