我目前正在为我们的networking设置IP表。 我们有以下的networking情况:
我们有3个networking,灰色,绿色和红色。 灰色networking有完整的互联网访问没有限制,但没有访问绿色或红色。 绿色无限制地访问灰色和互联网,红色没有互联网访问,并获得绿色和灰色。
灰色的IP范围是192.168.178.0/24(在eth_grey接口上)绿色的IP范围是192.168.50.0/24(在eth_green接口上)红色的IP范围是192.168.40.0/24(在接口eth_red上)
我在我的rules.v4中设置了以下规则(当前没有ipv6,稍后configuration,ipv6设置为接受策略):
*nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -o eth_grey -j MASQUERADE COMMIT *filter :INPUT DROP :FORWARD DROP :OUTPUT DROP # Allow all loopback traffic and traffic from established connections. -A INPUT -i lo -j ACCEPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow traffic in the internal network -A OUTPUT -s 192.168.40.0/24 -d 192.168.40.0/24 -j ACCEPT -A OUTPUT -s 192.168.50.0/24 -d 192.168.50.0/24 -j ACCEPT -A OUTPUT -s 192.168.178.0/24 -d 192.168.178.0/24 -j ACCEPT #Allow traffic from red to green -A OUTPUT -s 192.168.40.0/24 -d 192.168.50.0/24 -j ACCEPT #Allow traffic from green to grey -A OUTPUT -s 192.168.50.0/24 -d 192.168.178.0/24 -j ACCEPT #Allow traffic from red to grey -A OUTPUT -s 192.168.40.0/24 -d 192.168.178.0/24 -j ACCEPT # Allow all traffic in the grey network -A INPUT -i eth_grey -d 192.168.178.0/24 -j ACCEPT -A OUTPUT -s 192.168.178.0/24 -j ACCEPT #Allo outgoing traffic from the sales network -A OUTPUT -s 192.168.50.0/24 -j ACCEPT #Forward traffic from eth_green to eth_grey -A FORWARD -i eth_green -o eth_grey -j ACCEPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Accept ICMP and SSH. -A INPUT -p icmp -j ACCEPT -A INPUT -p tcp --dport 22 -j ACCEPT COMMIT
现在的情况是,从绿色到互联网的stream量是允许的,例如我可以ping通8.8.8.8 。 我不能做的是解决DNS。 在路由器DNSmasq安装。 我甚至不能直接在路由器上连接到DNS时parsingDNS,但是当我将策略设置为接受并刷新规则时,我可以parsingDNS,所以我假设DNSMasq设置正确。
我想你需要仔细重读iptables文档。
请看这个图表,可视化iptables链: https : //github.com/rda0/diagram/blob/master/iptables-chains-hooks.png
几乎所有的规则,你将要设置你所描述的必须在FORWARD链。 所有需要路由的数据包(意味着:从一个networking范围到另一个networking范围)都通过这个链路。
INPUT链是针对所有的数据包针对本地系统(路由器),而OUTPUT链针对来自本地系统的数据包。
你的政策都是DROP 。 所以你需要打开一些端口来允许DNSstream量。
例如,当您通过sshtesting时,要在路由器上本地允许DNS,则需要在OUTPUT链中打开端口53 。
我不明白哪个接口连接到互联网。 但是为了允许你的networking使用DNS,你必须在FORWARD链中打开端口53 ,其规则如下:
-A FORWARD -i <local_if> -o <inet_if> --dport 53 -j ACCEPT
其中local_if是您的networking之一, inet_if是连接到互联网的接口。
我还build议在OUTPUT和FORWARD链中接受RELATED,ESTABLISHEDstream量。
规则#3-5:像这样的stream量将永远不会打你的路由器,因为它不需要路由。