NAT를 통해 트래픽이 전달되지 않음

NAT를 통해 트래픽이 전달되지 않음

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를 사용하십시오.)

관련 정보