네트워크 경로를 설정할 수 없습니다.

네트워크 경로를 설정할 수 없습니다.

내 노트북에서 다른 장치로의 네트워크 경로를 설정하는 데 어려움을 겪고 있습니다. 네트워킹 배경이 부족하다는 점을 인정할 테니 무지해서 죄송합니다. 나는 다음과 같은 설정을 가지고 있습니다 :

[장치-A] <--WiFi--> [라우터] <--WiFi--> [장치-B] <--이더넷--> [장치-C]

다음과 같은 IP 주소가 있습니다(자동으로 구성됨).

장치-A:

  • 와이파이: 192.168.0.155

장치-B:

  • 와이파이: 192.168.0.121
  • 이더넷: 10.42.0.1

장치-C:

  • 이더넷: 10.42.0.134

모든 장치는 Ubuntu 20.04를 사용하고 있습니다. IPv4 방법이 "다른 컴퓨터와 공유"로 설정된 네트워크 관리자 GUI를 사용하여 Device-B에서 Device-B와 Device-C 간의 유선 연결을 구성했습니다. 다른 모든 설정은 기본값으로 유지되었습니다. Device-A에서 다음을 사용하여 Device-C에 대한 경로를 설정하려고 했습니다.

sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1

장치 C는 장치 A에 ping을 수행할 수 있고 장치 A는 192.168.0.121 및 10.42.0.1 모두에서 장치 B에 ping을 수행할 수 있습니다. 그러나 Device-A에서 Device-C를 ping하려고 하면 다음과 같은 결과가 나타납니다.

$ ping 10.42.0.134
PING 10.42.0.134 (10.42.0.134) 56(84) bytes of data.
From 192.168.0.121 icmp_seq=1 Destination Port Unreachable

Device-A가 Device-C와 통신할 수 있도록 장치를 어떻게 구성할 수 있나요? 이것은 매우 간단해야 할 것 같지만 알아낼 수 없었습니다.

업데이트

B에서 전달이 활성화되었습니다.

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

iptablesB에 대한 내 규칙 세트는 다음과 같습니다 .

$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 20319 packets, 21M bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6  2236 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
   12   863 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  193 33179 ACCEPT     all  --  *      eth0    0.0.0.0/0            10.42.0.0/24         state RELATED,ESTABLISHED
  201 19734 ACCEPT     all  --  eth0   *       10.42.0.0/24         0.0.0.0/0           
    0     0 ACCEPT     all  --  eth0   eth0    0.0.0.0/0            0.0.0.0/0           
    9   756 REJECT     all  --  *      eth0    0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 18275 packets, 2577K bytes)
 pkts bytes target     prot opt in     out     source               destination         
$ sudo iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 577 packets, 172K bytes)
 pkts bytes target     prot opt in     out     source               destination         

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

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

Chain POSTROUTING (policy ACCEPT 468 packets, 65733 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  178 14264 MASQUERADE  all  --  *      *       10.42.0.0/24        !10.42.0.0/24        

B에는 방화벽 규칙을 구성하지 않았습니다.

답변1

문제는 iptablesDevice-B의 규칙 세트였습니다(의견에서 Thomas의 도움 덕분에).

출력의 질문에 표시된 것처럼 sudo iptables -L -n -vB를 통과하는 패킷이 eth0으로 전달되는 대신 거부되는 것을 볼 수 있습니다(질문의 "Chain FORWARD" 아래 네 번째 항목으로 표시됨). 다음 명령을 사용하여 모든 전달 규칙을 나열할 수 있었습니다 iptables -S.

$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -d 10.42.0.0/24 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.0.0/24 -i eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth0 -j ACCEPT
-A FORWARD -o eth0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i eth0 -j REJECT --reject-with icmp-port-unreachable

출력에서 마지막 두 규칙이 문제를 일으키는 원인입니다. 다음을 사용하여 이를 제거했습니다.

sudo iptables -D FORWARD -o eth0 -j REJECT
sudo iptables -D FORWARD -i eth0 -j REJECT

이제 Device-A에서 Device-C로 ping/ssh를 실행할 수 있으며 그 반대의 경우도 마찬가지입니다.

관련 정보