流量未透過 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 產生的新無線網路時,我可以成功存取網際網路。我無法 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 來“重新加載”此檔案)

相關內容