寻求解决以下问题:
- 乌班图 18.04.5
- 英特尔i3
我有两个物理端口(enp1s0 和 enp2s0),一个连接到 enp1s0 的路由器和一个连接到 enp2s0 的摄像头。
- enp1s0 是 192.168.1.10
- 连接的路由器是192.168.1.1
- enp2s0 是 192.168.0.10
- 相机是192.168.0.1
我希望能够通过相机访问互联网。 (例如:ping -I enp2s0 1.1.1.1)。
|———--| |—--——|
enp1s0 enp2s0
|_____| |_____|
| |
| |
|--———| Camera
Router
|_____|
|
|
Internet
我尝试过以下规则:
通过以下方式启用 IP 转发:
#vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #sysctl -p
更新IP表
iptables -A FORWARD -i enp2s0 -o enp1s0 -j ACCEPT iptables -A FORWARD -i enp1s0 -o enp2s0 -j ACCEPT iptables -t nat -A POSTROUTING -o enp1s0 -J MASQUERADE iptables -t nat -A POSTROUTING -o enp2s0 -J MASQUERADE
我仍然无法使两个接口通话 - 希望从 enp2s0 ping enp1s0,然后从 enp2s0 访问互联网。它们必须位于不同的子网中。
谁能帮我理解这里的路由问题,以帮助这两个子网相互通信?
答案1
因此,您要做的就是获取整个子网192.168.0.*/24
(其中恰好有摄像头),并在您的 Ubuntu 计算机上使用 NAT 假装该子网中的所有内容实际上都来自 Ubuntu 计算机。你需要这样做只是因为路由器只接受来自子网的连接192.168.1.*/24
(如果路由器没有这个限制,你可以只做正常的路由,没有NAT)。
这意味着您需要一个单身的NAT 的规则,即出接口的规则,即enp1s0
。 NAT 通过连接跟踪器工作,因此对于传出数据包,源地址将替换为 上的地址enp1s0
,而对于返回数据包,目标地址将替换为原始源地址。
因此,请尝试使用单一规则,然后在相机上执行某些操作以尝试连接(或用第二台计算机替换相机,以便您可以执行操作ping
)。你不能通过在 Ubuntu 机器上进行测试ping -I
,因为这不会使用转发表。
如果设置仍然不起作用,请tcpdump
同时对 和进行操作enp1s0
,enp2s0
同时从相机产生流量;这应该为您提供足够的信息来缩小任何其他问题的范围。
答案2
我最初将其添加为编辑 - 但这里它是作为答案:
我已经使用 iptableslush 删除了任何旧规则(尽管我相信这是在重新启动时完成的),并更改了我最初认为正确的 nat 规则。
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface enp1s0 -j MASQUERADE
iptables --append FORWARD --in-interface enp2s0 -j ACCEPT