我有一个使用 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 192.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“重新加载”此文件)