
내 노트북에서 다른 장치로의 네트워크 경로를 설정하는 데 어려움을 겪고 있습니다. 네트워킹 배경이 부족하다는 점을 인정할 테니 무지해서 죄송합니다. 나는 다음과 같은 설정을 가지고 있습니다 :
[장치-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
iptables
B에 대한 내 규칙 세트는 다음과 같습니다 .
$ 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
문제는 iptables
Device-B의 규칙 세트였습니다(의견에서 Thomas의 도움 덕분에).
출력의 질문에 표시된 것처럼
sudo iptables -L -n -v
B를 통과하는 패킷이 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를 실행할 수 있으며 그 반대의 경우도 마찬가지입니다.