仅通过 eth0 路由特定的内联网流量;其他所有流量均通过 wlan0

仅通过 eth0 路由特定的内联网流量;其他所有流量均通过 wlan0

我对网络还比较陌生,所以请多包涵。我在NVIDIA Jetson TX2。 我有一个Velodyne 激光雷达 VLP-16 Lite直接连接到以太网端口,并通过 wlan0 连接到互联网。当我连接到 eth0(又称激光雷达)时,我仍然连接到 wlan0,我无法 ping google。如果我断开与 eth0 的连接,互联网访问就会恢复,因为我总是连接到 wlan0。

第一个解决方案 我进入网络管理器并修改了 eth0 设置,使其具有 ip 192.168.2.227 和网络掩码 255.255.255.0。我还编辑了 IPv4 路由,使其包括地址:192.168.2.1 和网络掩码 255.255.255.0,然后单击单选按钮“仅将此连接用于其网络上的资源”。

这使得我可以通过 wlan0 连接到互联网,并通过其主机 IP 192.168.2.201(我设置)直接与 LIDAR 外围设备通信。

所以有什么问题?我相信我正在丢失数据包,也许是随机的。

那么问题是什么?我如何将来自或发往特定地址的所有内容路由到特定接口并让其他所有内容转到另一个接口?

也就是说:如何让发送到 IP 地址 192.168.2.201(我 => 激光雷达)的所有流量都通过 eth0,让发送到 IP 地址 192.168.2.202(激光雷达 => 我)的所有流量都通过 eth0?同时让其他所有流量都通过 wlan0?

目前我的系统如下所示:

ubuntu@VPro-test2:~$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 wlan0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan0
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

ubuntu@VPro-test2:~$ ip route
default via 192.168.1.1 dev wlan0  proto static  metric 600 
169.254.0.0/16 dev eth0  scope link  metric 1000 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.45  metric 600 
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.202  metric 100

ubuntu@VPro-test2:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:04:4b:8c:c1:0c  
          inet addr:192.168.2.202  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::1a8f:c89c:e32c:8de0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:131110 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1494 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:72618144 (72.6 MB)  TX bytes:824212 (824.2 KB)
          Interrupt:42 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:43 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:2467 (2.4 KB)  TX bytes:2467 (2.4 KB)

wlan0     Link encap:Ethernet  HWaddr 00:04:4b:8c:c1:0a  
          inet addr:192.168.1.45  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::9679:8dae:defd:aafa/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6277 errors:0 dropped:0 overruns:0 frame:0
          TX packets:382 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:783723 (783.7 KB)  TX bytes:49404 (49.4 KB)

我正在明确寻找启用此功能的配置,无论是命令行还是图形界面。谢谢!

答案1

我不是专家,只是自学成才。希望这能对你有所帮助,因为实际上没有人给你任何答案。

您认为您正在丢失数据包,也许是随机的 - 您是如何得出这个结论的?


我如何将来自或发往特定地址的所有内容路由到特定接口并让其他所有内容转到另一个接口?

通过设置路线,就像您已经使用 GUI 所做的那样。

它应该像在命令行中一样工作:

连接到激光雷达的以太网设备

sudo ip route 通过 standardgateway1 添加特定服务器或设备或整个子网的 ip

  • 假设你的激光雷达的 IP 是 192.168.2.202
  • 该网络上的路由器或标准网关的 IP 为 192.168.2.1

该命令可能看起来像这样

sudo ip route add 192.168.2.202 via 192.168.2.1

或者如果您想将所有流量路由到该子网内的任何设备:

sudo ip route add 192.168.2.0/24 via 192.168.2.1

/24 是子网掩码 255.255.255.0,即 8 位 + 8 位 + 8 位 + 0 位 = 24 位

连接到互联网的以太网设备

sudo ip route 通过标准网关2添加所有剩余部分到互联网

  • rest/internet 的默认 ip 为 0.0.0.0
  • 你的路由器或调制解调器的 IP 可能是 192.168.1.1

该命令应如下所示:

sudo ip route add 0.0.0.0 via 192.168.1.1

路由过程中有时会出现的问题:

您正在发送带有坏的源 IP。例如,您可能会将源 IP 192.168.1.x 发送到 192.168.2.x 的设备。要检查这一点,您可以使用tcpdump -i interface -vvv并检查显示为您的传出 IP 的内容。要修复此问题,您需要使用iptables并伪装您的流量,例如sudo iptables -A POSTROUTING -t nat -o specific-interface-for-example-eth0 -j MASQUERADE

为了监控您的流量,我建议使用它,bmon因为它还会显示每个设备的碰撞/错误。

相关内容