苹果升级iOS10和Mac OS X Sierra有一段时间了,我的iPhone一不小心就中招升级了,导致我在外边玩游戏速度特别差,也不能拨号回家。

  之前尝试着装个L2tp服务器,发现问题多多,始终不能成功;正好这次放假看到了知乎这个答案,所以就尝试着按照这个方式装一个OpenVPN服务器。

  1、安装相应的软件:

1
2
3
opkg update
opkg install openvpn-polarssl
opkg install openvpn-easy-rsa

  原文说的KEY_CN就是被注解掉的,所以不用执行相应的sed。

  2、修改/etc/easy-rsa/vars,把原文所说的

1
2
3
4
5
6
KEY_SIZE=2048
export KEY_COUNTRY=CN
export KEY_PROVINCE=Canton
export KEY_CITY=city_name
export KEY_ORG=org_name
export KEY_EMAIL=email_address

都修改一下,然后执行

1
2
source /etc/easy-rsa/vars
clean-all

来做好生成证书的准备。

  3、执行命令生成证书

1
2
3
4
pkitool –initca
pkitool --server 服务端名称
pkitool 客户端名称0
pkitool 客户端名称1

理论上有一个客户端就需要生成一套客户端的证书,当然,你也可以按照我的一会列出的参数,一套证书多个客户端使用。

  4、执行build-dh来生成Diffie Hellman参数

  5、生成ta.key

1
openvpn --genkey --secret /etc/easy-rsa/keys/ta.key

  6、编辑/etc/config/network,修改lan下的option ifname ,增加tun0

  7、修改/etc/config/openvpn

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
config openvpn my-server
	option enabled 1
	option local 0.0.0.0
	option port 1194
	option proto tcp
	option dev tun
	option ca /etc/easy-rsa/keys/ca.crt
	option cert /etc/easy-rsa/keys/my-server.crt
	option key /etc/easy-rsa/keys/my-server.key
	option dh /etc/easy-rsa/keys/dh2048.pem
	option server "172.8.0.0 255.255.255.0"
	list push "redirect-gateway def1"
	list push "dhcp-option DNS 172.8.0.1"
	list push "dhcp-option WINS 172.8.0.1"
	option client_to_client 1
	option duplicate_cn 1 #允许一个证书多个客户端使用
	option keepalive "10 120"
	option tls_auth "/etc/easy-rsa/keys/ta.key 0"
	option tls_server 1
	option comp_lzo yes
	option max_clients 100
	option persist_key 1
	option persist_tun 1
	option status /tmp/openvpn-status.log
	option log         /tmp/openvpn.log
	option verb 3
	option mute 20

  8、添加路由做测试 iptables -t nat -A POSTROUTING -s 172.8.0.0/24 -j MASQUERADE

  9、添加路由,保证以后重启能正常使用iptables -A FORWARD -s 172.8.0.0/24 -j ACCEPT

  10、编辑/etc/config/firewall,在wan开放1194端口

1
2
3
4
5
6
7
8
config rule
option enabled '1'
option target 'ACCEPT'
option src 'wan'
option name 'Allow-WAN-OpenVPN-Input'
option family 'ipv4'
option proto 'tcp'
option dest_port '1194'

  11、重启服务生效

1
2
/etc/init.d/openvpn enable
reboot(or /etc/init.d/network restart;/etc/init.d/firewall restart;/etc/init.d/openvpn start)

客户端只要把相应的ca.crt,ta.key,客户端.crt,客户端.key下载下来,编辑文本文件vpn.ovpn,内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
client
proto tcp
remote 服务器ip 1194
dev tun
comp-lzo
nobind
ca ca.crt
cert 客户端.crt
key 客户端.key
tls-auth ta.key 1
route-delay 2
route-method exe
verb 3

如果需要拨号后使用代理,只需要添加如下参数:

1
2
dhcp-option PROXY_HTTP 代理ip 代理端口
dhcp-option PROXY_HTTPS 代理ip 代理端口

如果要使用自动代理,添加如下参数:

1
dhcp-option PROXY_AUTO_CONFIG_URL http://example.tld/proxy.pac

不过上述几个参数并非所有openVPN客户端支持。

update-2017-11-12:

经过升级到openwrt 15.05.1后,发现openvpn-polarssl出现了segment fault,在路由器上没法调试,改用openvpn-openssl后,发现没有问题,配置等无需修改,完全兼容。