Ubuntu两个物理端口之间的路由问题

Ubuntu两个物理端口之间的路由问题

寻求解决以下问题:

  • 乌班图 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同时对 和进行操作enp1s0enp2s0同时从相机产生流量;这应该为您提供足够的信息来缩小任何其他问题的范围。

答案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

相关内容