Fix Ubuntu policy-based route with fwmark not work

近期发现Ubuntu基于ip rule add fwmark … lookup …所做的策略路由无法正常使用,而Debian正常。抓包的特征就是,出网数据包能应用到策略路由,也能抓到回应的数据包,但回应的数据包被内核丢弃,不会送达user space。

而ip rule add from … lookup …则正常。

查找资料得知是rp_filter的影响(见此:https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt),继而发现Ubuntu的/etc/sysctl.d是有以下这个文件的:

编辑/etc/sysctl.d/10-network-security.conf,把net.ipv4.conf.default.rp_filter以及net.ipv4.conf.all.rp_filter改成2,然后应用:

 

VPN下路由表的编辑,实现部分IP直连

平常在Windows下使用VPN,各位都会发现,所有出网的数据包都通过VPN了。虽然这样可以访问某些被“禁止访问”的网站,但访问国内的网站,速度却慢了。

事实上,连接VPN后,Windows会自动把系统的默认网关改为VPN的,因此数据包都通过了VPN服务器。既然如此,我们再对路由表进行操作,添加一些对国内IP生效的路由规则,那样就能实现访问国外网站时通过VPN,访问国内网站时直连。

Windows下对路由表进行操作的命令是route,route的用法如下:

上面分别是添加路由,更改路由,以及删除路由的用法。

首先连接VPN,让Windows自动更改路由。

接下来使用route对国内IP的路由表进行更改,下面提供一个国内IP的IP段列表:

Windows的打开cmd,执行以下的命令(不要保存为BAT再运行)

 

Linux使用pptpclient连接VPN后并无自动更改路由,所以需要自己添加一条规则,可以ip这个命令(ppp设备名称可以通过ifconfig查看),执行以下命令即可:

 

执行完上面的命令后,即可实现访问国内的网站直连,访问国外网站走VPN。