NAT を使用してインターネット アクセスを提供するルーターと、eth0 でこのルーターに接続されたクライアント Linux ボックス (A) があります。
この Linux ボックスには wlan インターフェース wlan0 もあります。このボックスでこのインターフェースを使用してワイヤレス ネットワークをアドバタイズし、IP アドレスを配布し、このネットワークからゲートウェイ ルーターによって提供される他のネットワークにトラフィックを転送したいと考えています。
これまでのところ、hostapd と dhcp サーバーは動作しており、2 番目の 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からのroute -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 から取得した traceroute:
$ 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 * * *
等
編集:
別のデバイス C から A によって生成された新しいワイヤレス ネットワークに接続すると、インターネットに正常にアクセスできます。B には 2 つの 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 ではデフォルト ゲートウェイは 1 つしか許可されないことが判明しました。上記のコマンドを実行すると、次の結果が生成されます。
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」の場合、それが [あなたの] 問題の 1 つである可能性があります。「echo 1 > /proc/sys/net/ipv4/ip_forward」コマンドを発行することで、これを一時的に修正できます。また、/etc/sysctl.conf の適切な行を「net.ipv4.ip_forward = 1」に追加/変更することで、永続的に修正できます (このファイルを「再ロード」するには、sysctl -p /etc/sysctl.conf を使用します)。