이제 라우팅 문제에 관한 매우 기본적인 질문이 있습니다.
따라서 내 네트워크의 ip 10.0.0.1의 중앙 서버는 ip net 10.0.0.0/25의 라우터입니다. 클라이언트 10.0.0.100에는 IP 네트워크 172.20.10.0/25를 제공하는 액세스 포인트에 WiFi 연결이 있습니다.
10.0.0.0./25의 모든 클라이언트가 172.20.10.0/25에 도달할 수 있도록 10.0.0.1에 경로를 추가하려면 어떻게 해야 합니까?
지금까지 테스트한 내용(ipv4 전달 및 iptables 위장이 처리됨):
예를 들어 10.0.0.1에 경로를 추가합니다.
route add -net 172.20.10.0 netmask 255.255.255.128 dev br0
10.0.0.1을 172.20.10.0/25 네트워크에 연결할 수 있지만 그 이상은 아닙니다. 다른 클라이언트의 Traceroute는 요청이 10.0.0.1에서 정체되어 모든 클라이언트에서 개별적으로 동일한 경로를 구성할 때까지 다른 네트워크에 연결할 수 없음을 보여줍니다. 그러나 이는 10.0.0.1이 게이트웨이라는 생각과 모순됩니다.
위의 명령을 사용한 후 10.0.0.1의 라우팅 테이블은 다음과 같습니다.
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 <WANIP IS HERE> 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.128 U 0 0 0 br0
<WANIP IS HERE> 0.0.0.0 255.255.255.252 U 0 0 0 eth0
172.20.10.0 10.0.0.100 255.255.255.128 UG 0 0 0 br0
내가 여기서 무엇을 놓치고 있는 걸까요?
시간을 내어 아마도 매우 어리석을 수도 있는 질문에 답변해 주셔서 정말 감사합니다!
답변1
일반적으로 게이트웨이(이 경우 10.0.0.1 시스템)에 동일한 네트워크(예: 10.0.0.100)의 다른 호스트를 통해 원하는 네트워크에 대한 경로가 있는 경우 ICMP 리디렉션 메시지를 보내 클라이언트를 다른 게이트웨이로 보냅니다. .
그러나 이렇게 하려면 내부 네트워크에서 내부 네트워크로의 전달을 허용하는 iptables 규칙을 추가해야 합니다. 이는 비논리적으로 들릴 수 있지만 실제로는 내부 네트워크에서 내부 네트워크로 트래픽을 효과적으로 전송하기 때문에 그렇습니다.
다음 규칙을 추가합니다.
iptables -A FORWARD -i br0 -o br0 -j ACCEPT
이제 10.0.0.0/25 네트워크의 클라이언트 호스트가 172.20.10.x에 액세스하려고 하면 호스트는 기본 게이트웨이인 10.0.0.1로 패킷을 보냅니다. 기본 게이트웨이는 172.20.10.0/25에 대한 경로가 10.0.0.100을 통과한다는 것을 알고 있으므로 ICMP redirect 172.20.10.x to host 10.0.0.100
패킷을 클라이언트 호스트로 다시 보냅니다. 클라이언트 호스트는 대상 호스트에 임시 경로를 추가하고 해당 호스트의 게이트웨이로 10.0.0.100을 사용합니다.
클라이언트 호스트는 이러한 ICMP 리디렉션을 허용하도록 구성되어야 합니다. 이러한 리디렉션은 트래픽을 가짜 게이트웨이로 전환하기 위해 악의적인 리디렉션이 전송될 때 보안 문제를 나타낼 수 있지만 이는 Linux의 기본값이며 Windows에서도 이를 허용합니다. Linux에서는 net.ipv4.conf.default.accept_redirects
sysctl 설정을 통해 이를 제어할 수 있습니다.
답변2
@Wurtel의 이전 답변에 다음을 입력해야 한다는 점을 추가하고 싶습니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
또한 다음과 같이 연락처를 위장해야 합니다.
IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
그렇지 않으면 나가는 트래픽이 올바르게 처리되지 않습니다.