我想使用运行最新 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
包来配置它。使用应该可用于的
工具进行配置可能会更容易。shorewall
pi
岸墙该网站有大量文档,可用于构建您自己的规则或仅仅是工具shorewall
。