iptables를 사용하여 Wi-Fi 라우터의 모든 트래픽을 로컬 웹 서버로 리디렉션하려고 합니다. 내 명령이 올바른지 확실하지 않으며 규칙에서 라우터 IP(172.16.0.1)를 제외하여 라우터에 액세스하지 못하도록 잠그는 것을 방지하고 싶습니다.
지금까지 내가 생각해낸 것:
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j DNAT --to 172.16.0.2:80
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 443 -j DNAT --to 172.16.0.2:80
위에서 테스트한 결과 라우터에 다시 액세스할 수 없고 리디렉션이 작동하지 않게 되었습니다. 내가 무엇을 잘못하고 있으며 172.16.0.1이 172.16.0.2로 리디렉션되지 않도록 제외하려면 어떻게 해야 합니까?
설정: 172.16.0.2는 웹 서버의 IP입니다. 172.16.0.1은 인터넷에 연결되지 않은 내 라우터(dd-wrt)입니다.
내가 달성하고 싶은 것의 예:
- 사용자가 Wi-Fi 핫스팟에 연결하고 www.siteA.com에 액세스하려고 시도하지만 172.16.0.2(/index.html)로 리디렉션됩니다.
- 사용자가 Wi-Fi 핫스팟에 연결하고 www.siteB.com에 액세스하려고 시도하지만 172.16.0.2(/index.html)로 리디렉션됩니다.
- 사용자가 172.16.0.1에 액세스하려고 시도하지만 아무 표시도 발생하지 않습니다.
답변1
필요한 것은 다음 규칙뿐입니다.
iptables -t nat -I PREROUTING --src 0/0 --dst 172.16.0.2
이는 nat 테이블(-t nat)의 PREROUTING 체인(?=-I)에 규칙을 삽입합니다. 즉:
대상 주소가 172.16.0.2(--dst 172.16.0.2)인 모든 수신(-src 0/0) 패킷.
기억할 사항: 들어오는 트래픽을 리디렉션한다는 것은 nat 테이블의 PREROUTING 체인에 규칙을 삽입하는 것을 의미합니다. 지정된 인터페이스에 대해서만 리디렉션합니다. 자세한 내용은 man iptables를 참조하고 REDIRECT 키워드를 검색하세요.
--append PREROUTING --source 172.16.0.1 --jump RETURN
RETURN은 체인 순회를 중지하고 이전(호출) 체인의 다음 규칙에서 다시 시작하는 것을 의미합니다. 체인 정책에 의해 지정된 대상은 내장 체인의 끝에 도달하거나 내장 체인의 대상 RETURN이 있는 규칙이 일치하는 경우 패킷의 운명을 결정합니다.