기본 경로를 통해 한 서버에서 IP 전달

기본 경로를 통해 한 서버에서 IP 전달

다음 규칙이 설정된 장치(IP 10.110.1.3)가 있습니다.

$ ip route
default via 10.110.1.4 dev wlan0 onlink

두 컴퓨터 모두에서 ipv4 전달이 활성화되어 있습니다. 두 기계는 서로 대화할 수 있습니다.

여기 내 iptables가 있습니다. 인터페이스 wlp0s20u1에서 wlp3s0으로 라우팅하고 싶습니다.

$ iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o wlp3s0 -j MASQUERADE

"라우팅" 장치 10.110.1.4의 경로:

$ ip route
default via 192.168.1.1 dev wlp3s0  proto static 
10.110.1.0/24 dev wlp0s20u1  proto kernel  scope link  src 10.110.1.4 
192.168.1.0/24 dev wlp3s0  proto kernel  scope link  src 192.168.1.110  metric 600 

"if 인터페이스" 경로 get을 사용하면 이것이 결코 작동하지 않을 것이 분명합니다.

$ ip route get to 192.168.1.1 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

$ ip route get to 8.8.8.8 from 10.110.1.3 iif wlp0s20u1
RTNETLINK answers: No route to host

나는 경로 src 192.168.1.110에서 이 문제를 발견 192.168.1.0하고 이 문제를 해결하기 위해 다음 경로를 추가해 보았습니다.

$ sudo ip route add 192.168.1.1/32 dev wlp3s0

그러나 이것도 도움이 되지 않았습니다.

ping이 어디로 가는지 확인하기 위해 tcpdump를 사용하여 icmp를 분석했습니다.

$ tcpdump -i wlp0s20u1 -n icmp
listening on wlp0s20u1, link-type EN10MB (Ethernet), capture size 262144 bytes
18:13:19.355166 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 1, length 64
18:13:20.359770 IP 10.110.1.3 > 8.8.8.8: ICMP echo request, id 32366, seq 2, length 64

그리고

tcpdump -i wlp3s0 -n icmp                                             
listening on wlp3s0, link-type EN10MB (Ethernet), capture size 262144 bytes

"라우터" 컴퓨터에서 핑을 보내지 않는 한 wlp3s0 인터페이스에는 아무것도 없습니다.

따라서 여기서 분명한 문제는 커널이 wlp0s20u1에서 wlp3s0으로 패킷을 라우팅하는 방법을 모른다는 것입니다. 그러나 나는 이것을 어떻게 만드는지 잘 모르겠습니다. 이 작업을 수행하도록 명시적으로 경로를 추가하려고 시도했지만 작동하지 않는 것 같습니다.

다음 내용을 스팸으로 보내면 사전 라우팅 패킷 카운터만 올라갑니다(핑이 시도되는 동안).

$ iptables -t nat -v -L -n

Chain PREROUTING (policy ACCEPT 775 packets, 50740 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 24 packets, 1920 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 95 packets, 23073 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 5 packets, 1000 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   90 22073 MASQUERADE  all  --  *      wlp3s0  0.0.0.0/0            0.0.0.0/0 

어떤 도움이라도 대단히 감사하겠습니다!

편집: 단순화된 설명

세 가지 장치가 있습니다.

  • A: 192.168.1.1의 WiFi 라우터
  • B: 두 개의 Wi-Fi 카드가 있는 컴퓨터: 192.168.1.1 네트워크의 wlp3s0 및 10.110.1.0/24 네트워크의 wlp0s20u1.
  • C: 10.110.1.0/24 WiFi 네트워크에만 연결된 컴퓨터입니다.

나는 C가 두 개의 홉, 즉 먼저 B, A, 인터넷으로 인터넷(0.0.0.0/0)과 통신하도록 허용하려고 합니다.

문제는 B가 wlp3s20u1에서 wlp3s0으로 패킷을 라우팅하도록 하는 것입니다.

답변1

해결책은 특정 인터페이스에서 전달을 활성화하는 것이었습니다. 어떤 이유로 활성화되지 않았습니다.

sudo sysctl net.ipv4.conf.wlp3s0.forwarding=1
sudo sysctl net.ipv4.conf.wlp0s20u1.forwarding=1

관련 정보