NAT를 사용하여 인터넷 액세스를 제공하는 라우터와 eth0의 이 라우터에 연결된 클라이언트 Linux 상자(A)가 있습니다.
이 Linux 상자에는 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 * * *
등.
편집하다:
다른 장치 C에서 A가 생성한 새로운 무선 네트워크에 연결할 때 인터넷에 성공적으로 액세스할 수 있습니다. B에는 두 개의 NIC가 있으며 둘 다 무선이고 wlan2가 이 새로운 무선 네트워크에 연결되어 있습니다. 핑을 보낼 수 없습니다:
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를 사용하십시오.)