更新

更新

我想使用运行最新 Raspbian 的 PI 作为网络桥接器 - 不知道这是否完全正确的术语,但目标很容易解释:

  • PI 的一个 USB 端口连接到调制解调器 - 它通过 DHCP 获取接口的 IPusb0,互联网工作正常(开箱即用,非常好)
  • PI 的以太网/RJ45 端口连接到路由器的 WAN 端口
  • 我希望 PI 为连接到路由器的设备提供互联网访问权限 + 阻止所有传入请求(这里无需公开)

PI 不运行 DHCP;其eth0配置为使用静态 IP 192.168.0.1,地址掩码为 255.255.255.0,路由器配置为使用 IP 192.168.0.2、相同的地址掩码和 192.168.0.1 作为网关。

在测试中我发现,除了 PI 本身在线之外,还存在以下情况:

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

因此,从网络角度来看一切似乎都很好,但 LAN 设备无法访问互联网,大概是因为数据包转发规则缺失/错误。转发到达的所有数据包的规则是什么eth0从 IP 192.168.0.2 到动态 IPusb0+ 返回途中的“答案包”的对应部分?后者与阻止所有传入请求的规则结合?

谢谢!

更新

感谢@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>提供互联网连接的网络接口usb0。只要 FORWARD 的默认防火墙策略为 ACCEPT(并且没有其他规则明确禁止),这将有效,例如,如果iptables -S返回

OUTPUT DROP FORWARD ACCEPT INPUT DROP

如果将 FORWARD 的默认策略更改为 DROP,则以下规则将启用互联网连接共享: $> 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 规则似乎将防火墙配置为接受在其他地方做出的转发决定(伪装),但它们实际上并没有指示 iptables 转发任何内容 - 对吗??我觉得这很违反直觉……但如果我删除伪装规则,同时保留转发规则,则没有互联网连接。

答案1

您可能希望启用伪装,这将使所有传出的流量看起来像是来自 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 接口上的数据包。

如果您有 IPv6,则不需要网络地址转换,但有单独的 ip6tables 实现。有一个单独的shorewall6包来配置它。使用应该可用于的
工具进行配置可能会更容易。shorewallpi岸墙该网站有大量文档,可用于构建您自己的规则或仅仅是工具shorewall

相关内容