192.168.2.1, 192.168.2.2, 192.168.2.4 등 3대의 컴퓨터가 무선 Ad-hoc 네트워크에 연결되어 있습니다. 192.168.2.3과 통신할 때 192.168.2.1의 모든 트래픽이 192.168.2.2를 거치도록 하고 싶습니다. 원래
192.168.2.1 <---> 192.168.2.2 <---> 192.168.2.3
라우팅 테이블을 변경하는 방법은 무엇입니까?
나는 시도했다:
[email protected]: sudo ip route add 192.168.2.3 via 192.168.2.2 dev wlan0
[email protected]: sudo ip route add 192.168.2.1 via 192.168.2.2 dev wlan0
192.168.2.2에서 전달을 활성화했는데 작동했습니다. 그런데 192.168.2.1에서 경로를 추적하면 192.168.2.3으로 바로 가는 것처럼 보입니다. 이제 몇 개의 노드를 더 추가했고(아래 192.168.2.1의 경로 테이블 참조) Traceroute를 수행해도 여전히 하나의 홉을 얻습니다. 하지만 192.192.2.2에 로그인하고 192.168.2.5 경로를 추적하면 올바른 홉 수가 표시됩니다.
**ROUTE TABLE OF 192.168.2.1**
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.2.3 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.4 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.5 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
**ROUTE TABLE OF 192.168.2.2**
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.2.4 192.168.2.3 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.5 192.168.2.3 255.255.255.255 UGH 0 0 0 wlan0
노드가 캐싱을 수행할 수 있나요?
편집하다;이제 총 10개의 노드가 있고 이것이 내 Traceroute의 출력입니다.
traceroute -4 192.168.2.10
traceroute to 192.168.2.10 (192.168.2.10), 30 hops max, 60 byte packets
1 192.168.2.2 (192.168.2.2) 10.140 ms 10.324 ms 10.398 ms
2 192.168.2.3 (192.168.2.3) 17.292 ms 17.483 ms 17.564 ms
3 192.168.2.4 (192.168.2.4) 25.646 ms 25.708 ms 26.110 ms
4 192.168.2.5 (192.168.2.5) 34.156 ms 34.416 ms 34.501 ms
5 192.168.2.6 (192.168.2.6) 44.131 ms 44.479 ms 44.560 ms
6 192.168.2.7 (192.168.2.7) 51.382 ms 43.074 ms 46.144 ms
7 192.168.2.8 (192.168.2.8) 46.129 ms 43.374 ms 53.956 ms
8 192.168.2.9 (192.168.2.9) 58.156 ms 83.625 ms 83.642 ms
9 192.168.2.10 (192.168.2.10) 83.565 ms 84.008 ms 89.355 ms
답변1
귀하의 라우터는 다른 라우터에게 ICMP 리디렉션 패킷을 직접 보내도록 지시할 수 있습니다. 둘 다 동일한 네트워크에 있기 때문에 이것이 가능하다는 것을 알고 있습니다.
나는 세 대의 Linux 머신(mach1 <-> mach3 <-> mach2) 사이에 당신과 같은 경로를 설정하고 ping을 사용하여 테스트했습니다.
mach1# ping mach2
PING mach2 (x.x.x.237) 56(84) bytes of data.
From mach3 (x.x.x.238): icmp_seq=1 Redirect Host(New nexthop: mach2 (x.x.x.237))
64 bytes from mach2 (x.x.x.237): icmp_seq=1 ttl=63 time=0.537 ms
mach3 및 mach2의 Tcpdump는 mach3이 mach1로 리디렉션을 보낸 다음 모든 트래픽이 mach1과 mach2 사이에서 직접 이동함을 보여줍니다.
리디렉션은 반대 방식으로 사용될 수 있기 때문에 약간 수상쩍은 것으로 간주될 수 있습니다. 즉, 세 번째 시스템(중간자)을 통해 트래픽을 보내는 방식입니다. 예를 들어 참조하십시오.https://askubuntu.com/questions/118273/what-are-icmp-redirects-and-should-they-be-blocked
리디렉션 보내기 및 받기는 일부 sysctls를 사용하여 제어할 수 있습니다.
net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects
라우터에서 net.ipv4.conf.eth0.send_redirects를 0으로 설정하고 라우팅을 재설정한 후 모든 트래픽이 mach3을 통과했습니다.
이제 스위치 네트워크(및 VM)에서 이것을 테스트했기 때문에 WLAN을 사용하면 상황이 바뀔지 확실하지 않습니다. 기계가 이더넷 주소로 향하는 프레임만 처리한다면 나는 이 일을 해서는 안 된다고 생각합니다. 하지만 이론적으로는 하늘에서 모든 프레임을 뽑아내는 것이 가능합니다.
답변2
우선, 다음과 같은 소리가 납니다.XY 문제. 뭐하고 지내? 이런 방식으로 네트워크 트래픽을 라우팅하는 것이 문제에 대한 좋은 해결책이 될 가능성은 거의 없다고 확신합니다.
그래도,
라우팅 테이블에는 여전히 경로가 있습니다 192.168.2.0/24
. 즉 , 192.168.2.1
두 개의 경로가 도착하므로 192.168.2.2
커널 라우팅 하위 시스템은 두 경로를 모두 고려하여 하나는 직접 경로이고 다른 하나는 그렇지 않은 것을 찾아 직접 경로를 사용합니다(이 방법이 더 저렴해야 함).
이를 원하지 않는 경우 두 가지 옵션이 있습니다.
- 라우팅 테이블 항목이 삭제되었습니다
192.168.2.0/24
. 이는 라우팅 테이블 항목을 생성해야 함을 의미합니다.모두네트워크의 호스트 - 직접 액세스하려는 호스트를 포함합니다. - 두 개의 /24 네트워크 범위를 만들고 현재 두 범위에 모두 속하는 IP 주소를 호스트에 제공합니다
192.168.2.2
(별도의 네트워크 인터페이스는 필요하지 않음). 그런 다음 다른 모든 호스트가 해당 호스트를 통해 패킷을 라우팅하도록 할 수 있습니다.
그러나 이것이 최선의 방법인지는 확신할 수 없습니다. 당신이 달성하고 싶은 것이 무엇인지 설명해주세요.