自己搭了一个 OpenVPN Server,以前一直是在 Mac 里使用客户端,加上 chnroutes,用得很舒服。最近想在 Windows 里用一下,结果显示能连上,但是流量就是不从 VPN 走,很郁闷。
试了一下,连服务器 IP 10.0.0.1 都 ping 不通。运行 ipconfig 显示 OpenVPN 创建的 interface 信息为:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 10.0.0.6
Subnet Mask . . . . . . . . . . . : 10.0.0.5
Default Gateway . . . . . . . . . :
显然错得很厉害。看客户端日志,看服务器日志,都没找出什么原因来。最终发现是客户端配置文件里有个:
dev tap
好像网上很多教程都说 Windows 平台就用 tap,其它平台用 tun (或者是我的误解吧)。看 openvpn 官方的 manual:
TUN/TAP virtual network device ( X can be omitted for a dynamic device.)
See examples section below for an example on setting up a TUN device.
You must use either tun devices on both ends of the connection or tap devices on both ends. You cannot mix them, as they represent different underlying protocols.
tun devices encapsulate IPv4 while tap devices encapsulate ethernet 802.3.
所以这个配置必须与 Server 的配置保持一致。果然,改成 tun 以后一切正常了。
关于 chnroutes, 以前总是打开 Usage 就直接往下找 Windows 那块,刚发现这个已经是过时的方法了。这个老办法是先找到默认网关,然后把所有中国网段的流量都从这个默认网关走,所以应该在 OpenVPN 修改默认网关(如果服务器端设置了 push “redirect-gateway” 的话客户端会自动把默认网关改成 OpenVPN 的虚拟网卡)之前执行,否则就成了所有中国网段的流量都从 OpenVPN 走(可以用 route print * 验证一下)——没有意义。并且在我的机器上不知道为什么执行那个vbs脚本没有任何效果。
Usage 的开头就说,OpenVPN 版本在 2.1 以上的话,直接在配置文件里写上路由规则即可,用 net_gateway 表示原来的默认网关。我试了一下,路由完全正确地添加了。此法非常简单易用,看来以后看文档还是要仔细啊。
Leave a Reply