Total Pageviews

Wednesday 11 October 2017

关于Linux的Network Manager和iptables-persistent

最近给工作站换了Linux Mint,但是一直有几个问题:
  • 我的工作站是双网卡,一个内网,一个外网。但是两个网卡都设置了默认路由,导致无法上网。所以写了一个临时脚本来调整路由策略,每次开机都要执行,甚烦。
  • 因为需要使用shadowsocks科学上网,在防火墙配置了ss-redir的透明代理,然后试图用iptables-persistent自动加载,但是一直没有成功,于是每次开机也要手动执行。
这两个问题困扰了我很久,于是趁着周末加班又没有什么事情,把他们一并解决掉,记录一下。

0x01 双网卡路由的问题

Linux Mint使用了NetworkManager替代了传统的/etc/network/interfaces来进行网络配置,因此,无法在/etc/network/interfaces进行网关调整的工作。翻了翻资料,发现其实NetworkManager也挺简单的,在界面就可以配置: 
注意底下的这一句”仅对此网络上的资源使用此连接“,就是这个破烂翻译,一直让我没明白这是干嘛的。其实就是”是否将此连接设置为默认路由“。果断打勾,让其不要成为默认路由,完事。其影响的配置文件是在/etc/NetworkManager/system-connections下面,翻看一下:
[ipv4]
method=manual  
dns=192.168.1.1;  
address1=xxx.xxx.xxx.xxx/24,xxx.xxx.xxx.xxx  
route1=xxx.xxx.xxx.xxx/8,xxx.xxx.xxx.xxx,0  
never-default=true  
看到那个never-default了吗,就是刚才那个玩意儿。

0x01 iptables-persistent自动加载的问题

iptables-persistent提供了持久化防火墙配置以及自动恢复配置的功能,一般使用为:
  • sudo service iptables-persistent save 来保存当前的路由
  • sudo service iptables-persistent reload 来恢复保存的路由
  • 另外就是开机会自动加载保存的路由
但是我的路由一直没有办法开机自动加载,但是手动运行sudo service iptables-persistent reload又是正常的。
我的路由规则如下:
# Generated by iptables-save v1.4.21 on Mon Jan 18 18:42:51 2016
*nat
:PREROUTING ACCEPT [1346:179886]
:INPUT ACCEPT [312:64296]
:OUTPUT ACCEPT [1542:101428]
:POSTROUTING ACCEPT [1917:121104]
-A PREROUTING -p tcp -m set ! --match-set IGNORE dst -j REDIRECT --to-ports 8964
-A OUTPUT -p tcp -m set ! --match-set IGNORE dst -j REDIRECT --to-ports 8964
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT  
# Completed on Mon Jan 18 18:42:51 2016
# Generated by iptables-save v1.4.21 on Mon Jan 18 18:42:51 2016
*filter
:INPUT ACCEPT [27982:10781746]
:FORWARD ACCEPT [14978:14180368]
:OUTPUT ACCEPT [24258:5975052]
COMMIT  
# Completed on Mon Jan 18 18:42:51 2016
其中最主要的一段-A OUTPUT -p tcp -m set ! --match-set IGNORE dst -j REDIRECT --to-ports 8964就是加载透明代理。其中涉及到用ipset保存的国内路由表IGNORE。而ipset规则加载我是在/etc/rc.local中完成的。
琢磨着,会不会是iptables-persistent先于/etc/rc.local加载了,导致这时候找不到IGNORE这个ipset规则,于是防火墙加载失败了。遂将ipset加载过程放在了iptables-persistent的启动文件中/etc/init.d/iptables-persistent。果不起然,自动加载OK.

No comments:

Post a Comment