我有一台运行 Linux 变体的 Digi i.MX6UL。我已将ETH1
Advantech EKI-6332GN 路由器 (169.254.0.5)连接到(169.254.0.1) 端口。我有一台运行 Windows Mobile 6.5 的 Zebra MC67 (169.254.0.3) 手持式 (HH) 设备,使用 Wi-Fi 连接到路由器。 MC67 可以 ping 通 6UL,6UL 也可以 ping 通 MC67。 6UL 在 VZW 网络上还有一个静态 IP (166.155.85.213)。我现在需要的是 NAT,用于将 MC67 通过 Wi-Fi ( ETH1
) 路由到 的所有 TCP 端口 5000 流量PPP0
。
root@ccimx6ulsbc:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:04:F3:15:87:9D
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:113 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:19766 (19.3 KiB)
eth1 Link encap:Ethernet HWaddr 00:04:F3:15:87:9C
inet addr:169.254.0.1 Bcast:169.254.0.255 Mask:255.255.255.0
inet6 addr: fe80::204:f3ff:fe15:879c%lo/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:54 errors:0 dropped:0 overruns:0 frame:0
TX packets:10699 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4766 (4.6 KiB) TX bytes:1855108 (1.7 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1%1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:107545 errors:0 dropped:0 overruns:0 frame:0
TX packets:107545 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:8700743 (8.2 MiB) TX bytes:8700743 (8.2 MiB)
ppp0 Link encap:Point-to-Point Protocol
inet addr:166.155.85.213 P-t-P:0.0.0.0 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:281028 errors:9591 dropped:0 overruns:0 frame:0
TX packets:347128 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:91846595 (87.5 MiB) TX bytes:99025969 (94.4 MiB)
wlan0 Link encap:Ethernet HWaddr 00:04:F3:15:87:9E
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
wlan1 Link encap:Ethernet HWaddr 02:03:7F:D7:00:01
inet addr:192.168.46.30 Bcast:192.168.46.255 Mask:255.255.255.0
inet6 addr: fe80::3:7fff:fed7:1%lo/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6666 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:1897472 (1.8 MiB)
root@ccimx6ulsbc:~# ip route list
default dev ppp0 proto static scope link metric 700
169.254.0.0/24 dev eth1 proto kernel scope link src 169.254.0.1
192.168.46.0/24 dev wlan1 proto kernel scope link src 192.168.46.30
root@ccimx6ulsbc:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default * 0.0.0.0 U 700 0 0 ppp0
169.254.0.0 * 255.255.255.0 U 0 0 0 eth1
192.168.46.0 * 255.255.255.0 U 0 0 0 wlan1
答案1
让我们看看我的理解是否正确。
您在 Zebra MC67 手持设备(简称 HH)上有一个应用程序想要连接到端口 5000 上的已知 Internet 地址(例如 1.2.3.4)。
HH 通过路由器(充当交换机)连接到 LAN 网段,并且还连接到该 LAN 网段的是 Digi i.MX6UL(简称 6UL),它也具有 PPP 连接作为第二个接口。可通过此接口访问地址 1.2.3.4。
它是否正确?
第一步是删除链接本地地址 (169.。.*),因为这些不可路由。
因此,要么为每个设备分配一个静态地址(这需要在每个设备上进行配置),要么在某处运行 DHCP 服务器,例如在路由器上或在 6UL 上。 (每个 LAN 网段只能有一个 DHCP 服务器)。
在 6UL 上运行会更方便,因为这样 6UL 也可以宣布自己为该网段的网关。如何设置 DHCP 服务器的具体细节取决于您运行的 Linux 版本。
从私有 IP 范围中选择一个地址,例如 192.168.43.0/24。
查看 PPP 端点,它有一个公共 IP 地址,但我们刚刚分配了私有 IP 地址。因此,第二步您必须在 6UL 上设置 NAT(这种形式也称为 MASQUERADE):启用 IPV4 转发,添加必要的iptables
规则。有很多教程,例如这个。确保适应您的接口名称等。
如果 PPP 也使用私有 IP 地址,则不需要第二步;在这种情况下,您只需确保 LAN 网段使用的地址范围不会与 PPP 后面使用的地址范围发生冲突。
现在,LAN 网段中的所有计算机都应该能够到达 PPP 链路后面的所有计算机,无论在哪个端口上。