iptables:将input数据包从一个接口上的静态IP转发到另一个接口上的dynamicIP的规则

我想使用运行最新的Raspbian作为networking桥梁的PI – 不知道这是否正确,但目标很容易解释:

  • 其中一个PI的USB端口连接到调制解调器 – 它通过DHCP为接口usb0获得IP,互联网工程(开箱即用,非常好)
  • PI的以太网/ RJ45端口连接到路由器的WAN端口
  • 我希望PI给路由器互联网接入的设备+阻止所有传入的请求(这里没有任何提示)

PI不运行DHCP; 其eth0configuration为使用静态IP 192.168.0.1,地址掩码为255.255.255.0,路由器configuration为使用IP 192.168.0.2,地址掩码和网关为192.168.0.1。

在testing中,我发现除了PI本身在线的事实:

  • 从PI到路由器的ping是成功的(一旦在路由器上启用了该选项)
  • 从LAN设备ping到PI是成功的

所以networking方面明智的一切似乎很好,但没有从局域网设备的互联网接入,大概是因为数据包转发规则丢失/错误。 有什么规则将所有到达eth0的数据包从IP 192.168.0.2转发到usb0上的dynamicIP +返回的“应答数据包”的对应部分? 后者与阻止所有传入请求的规则结合使用?

谢谢!

更新

感谢@ BillThor的回答和本教程,我能够走上正轨。 不要混淆路由和防火墙方面。 如果启用了IP伪装,则“路由”不需要特殊的转发规则。 启用IP伪装的命令是:

$> sudo sysctl -w net.ipv4.ip_forward=1在内核中启用IP转发

$> sudo iptables -t nat -A POSTROUTING -o <wan_network_interface> -j MASQUERADE

<wan_network_interface>提供networking连接的networking接口, usb0在我的情况。 只要FORWARD的默认防火墙策略是ACCEPT(并且没有其他规则明确禁止它),f.ex就会工作。 如果iptables -S返回

OUTPUT DROP FORWARD ACCEPT INPUT DROP

如果将FORWARD的默认策略更改为DROP,则以下规则将启用Internet连接共享: $> sudo iptables -A FORWARD -i <shareconn_nw_intf> -o <online_nw_intf> -j ACCEPT $> sudo iptables -A FORWARD -i <online_nw_interface> -o <shareconn_nw_interface> -j ACCEPT

我仍然怀疑,如果一个数据包到达<online_nw_interface> 未被 IP伪装打开的端口上,会发生什么? 将它视为INPUT还是将应用上面的FORWARD规则? 我的意思是这些FORWARD规则似乎将防火墙configuration为接受其他地方的转发决定(伪装),但实际上并不指示iptables转发任何东西 – 对吗? 我觉得这非常直观…但是如果我在保持转发规则的同时删除了伪装规则,那么就没有互联网连接。

您可能希望启用伪装,这将使所有传出stream量看起来像是来自Pi。 起点是这些规则。

 sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -A FORWARD -i eth0 -j ACCEPT sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

您将需要在链上设置适当的策略。 可能使用额外的规则来删除WAN接口上的意外数据包和eth0接口上的REJECT数据包。

如果您有可用的IPv6,这不需要networking地址转换,但具有独立的ip6tables实现。 有一个单独的shorewall6包来configuration这个。
使用像shorewall这样的工具可以更容易地configuration。 Shorewall网站有大量的文档可以用来build立你自己的规则或者只是shorewall工具。