流量未通过 NAT 转发

流量未通过 NAT 转发

我有一个使用 NAT 提供互联网访问的路由器,还有一个通过 eth0 连接到该路由器的客户端 Linux 机顶盒(A)。

这个 Linux 盒子还有一个 wlan 接口,wlan0;我希望这个盒子使用这个接口来宣传无线网络,分配 IP 地址,并将流量从这个网络转发到网关路由器提供的其他网络。

到目前为止,我的 hostapd 和 dhcp 服务器已经正常工作;第二个 Linux 机器 (B) 可以连接到这个新的无线网络并获取 IP 地址。但是,B 无法在子网外 ping 通,无法解析地址等。

B 的 ifconfig 输出:

wlan2     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:192.168.42.10  Bcast:192.168.42.255  Mask:255.255.255.0
          inet6 addr: fe80::12fe:edff:fe1b:2bec/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:177 errors:0 dropped:0 overruns:0 frame:0
          TX packets:757 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:26221 (26.2 KB)  TX bytes:132884 (132.8 KB)

A 的 ifconfig 输出:

eth0      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:192.168.0.12  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:369 errors:0 dropped:0 overruns:0 frame:0
          TX packets:267 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:31272 (30.5 KiB)  TX bytes:33861 (33.0 KiB)

wlan0     Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:192.168.42.1  Bcast:192.168.42.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:79 errors:0 dropped:199 overruns:0 frame:0
          TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:18114 (17.6 KiB)  TX bytes:6874 (6.7 KiB)

A 上的 iptables -t nat -S 的输出:

-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE

A 上的 iptables -S 的输出:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT

任何想法都将不胜感激!

编辑:

从 A 路由 -n 输出:

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.42.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan0

从 B 获取的跟踪路由:

$ sudo traceroute -i wlan2 8.8.8.8
[sudo] password for eab: 
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *

ETC。

编辑:

我从另一台设备 C 连接到 A 生成的新无线网络时可以成功访问互联网。B 有两个 NIC,都是无线的,并且 wlan2 连接到这个新的无线网络。我无法 ping 通:

B的输出:

$ ping -I wlan2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.42.10 wlan2: 56(84) bytes of data.
From 192.168.42.10 icmp_seq=1 Destination Host Unreachable
From 192.168.42.10 icmp_seq=2 Destination Host Unreachable
From 192.168.42.10 icmp_seq=3 Destination Host Unreachable

编辑:

在 B 上运行“route -n”产生以下输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     9      0        0 wlan0
192.168.42.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan2

解决方案:运行“sudo route add default gw 1​​92.168.42.1 wlan2”解决了连接问题。事实证明,即使您有多个连接到多个网络的活跃 NIC,Linux 也只允许有一个默认网关。运行上述命令会产生以下结果:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.42.1    0.0.0.0         UG    0      0        0 wlan2
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.42.0    0.0.0.0         255.255.255.0   U     0      0        0 wlan2

答案1

最好再多提供一些细节,包括在每个盒子上执行“route -n”,以及从“b”到外部某处的跟踪路由。另外,

话虽如此,我怀疑您的问题在于您没有在路由器上启用数据包转发功能。

请在 A 上运行“cat /proc/sys/net/ipv4/ip_forward” - 如果该值为“0”,则可能是 [您的] 问题之一。您可以通过发出命令“echo 1 > /proc/sys/net/ipv4/ip_forward”暂时解决此问题 - 并通过在 /etc/sysctl.conf 中添加/更改相应行以永久解决此问题,即“net.ipv4.ip_forward = 1”(使用 sysctl -p /etc/sysctl.conf“重新加载”此文件)

相关内容