背景
笔者人在学校A,日常需要通过IPSeC连接学校B的实验室以访问内网服务器(位于学校B实验室192.168.21.x
网段)。但是,在Windows下使用L2tp/IPSeC,默认会代理所有流量(浏览网页、刷视频、微X扣扣等全部走代理)
这让笔者很不爽,原因有二:
- 本来另一头喂皮恩服务器带宽就不大,代理所有流量的话:
- 会影响到其他人使用
- 自己用也很慢
- 理论上另一头可以对笔者的所有流量进行审计
所以尝试折腾下一些配置及路由表,试图实现:在Windows下使用L2tp/IPSeC时,只对内网服务器IP段进行代理,其他的都不要过代理。
准备工作
下文会使用“这一头”来代指本地网络;“另一头”代指远端的内网。
首先,连接上公司/学校的L2tp/IPSeC:
然后,通过ipconfig
,查看自己拿到的另一头内网IP。
可以看到,是192.168.30.x
。
接着,用route print
查看当前的路由表:
查阅多方资料,“在链路上”意味着网关地址和接口地址一样。所以画圈的这一条路由规则网关地址就是接口地址
192.168.30.x
在这里,第一行是走我本地网络的默认路由;而第二行(圈起来的这一行)的默认路由,其网关是恰是另一头内网IP192.168.30.x
!这就是为什么咱们的流量都要经过代理的罪魁祸首。
记住另一头网络的路由的网关地址!,也就是上图画圈这一行的网关地址(“在链路上”意味着网关地址和接口地址一样)再进行下一步。
不让代理修改默认路由
控制面板->网络和Internet->网络和共享中心->更改适配器设置->找到自己喂皮恩的接口,右键属性。
然后,网络选项卡->IPv4那一行双击->高级->把“在远程网络上使用默认网关”给去掉
至此,我们已做到不让全部流量走代理,但是!代价是全部流量都不走代理了!!所以,接下来要手动操作路由表,让欲被代理的网段走代理。
修改路由表
警告|须知
由于每次通过IPSeC连接时,拿到的IP可能都不一样。所以每次连接后,可能都要自己删除旧路由、手动添加新路由。
或许可以整个脚本…?
假设另一头服务器位于192.168.21.x
网段,我想让访问192.168.21.x
的流量走代理。
执行route add [欲代理的网段] mask [欲代理网段的子网掩码] [之前通过route print看到的代理的网关]
即可,根据上面几张图我自己的情况,对应的是:
此时,ping另一头内网的机器已经可以ping通,同时其他流量都不走代理了。。
要是想删除这一条路由,直接route delete 192.168.21.0
(对应上面图里route add
的地址)即可。
参考资料
十四年前就有人提问过相关问题…
https://superuser.com/questions/12022/how-can-i-make-the-windows-vpn-route-selective-traffic-by-destination-network
后记
我导:服务器可以连了吧?那就开始干活吧!: )
我:: )