我对网络还比较陌生,所以请多包涵。我在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
因为它还会显示每个设备的碰撞/错误。