
내 설정은 다음과 같습니다.
두 개의 인터페이스 eth0
와 eth1
. eth1
내 일반 LAN을 통해 인터넷에 연결되어 있습니다. eth0
은(는) DHCP를 제공하고 인터페이스 자체의 IP 주소는 입니다 10.0.0.1
.
나는 다음을 달성하고 싶습니다 :
eth0
연결된 시스템에서 발생하는 포트 80의 패킷을 라우팅 시스템 자체의 포트 80으로 리디렉션하고 응답 패킷을 다시 리디렉션하고 싶습니다 . 그 자체로는 충분히 간단하지만 한 가지 요구 사항이 더 있습니다. eth0
특정 IP 주소를 가진 클라이언트가 이로부터 면제될 수 있도록 하고 포트 80 패킷이 평소대로 라우팅되도록 하고 싶습니다 . 어떻게 해야 하나요? 지금까지 모든 포트 80 패킷을 eth0
로컬 시스템으로 리디렉션하기 위해 다음을 수행했습니다 . 작동하고 있지만 두 번째 요구 사항을 수행하는 방법을 모르겠습니다.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0
iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1
답변1
PREROUTING
해당 라인에 도달하기 전에 테이블 을 종료해야 합니다 DNAT
.
iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN
이는 첫 번째 규칙으로 면제 IP( )의 모든 패킷에 대해 라우팅 테이블을 -I
종료( )하는 새 규칙을 삽입( ) 해야 하므로 규칙 에 도달하기 전에 적중됩니다 .-j RETURN
-s <exempt ip>
DNAT
( 에서도 비슷한 작업을 수행해야 할 수도 있습니다 POSTROUTING
. 확실하지는 않습니다.)
다른 옵션은 man ipset
면제하려는 IP에 대해 IP 세트( )를 생성한 다음 DNAT
및 SNAT
규칙에 반전된 일치 항목을 추가하는 것입니다.
ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0
iptables를 수정하지 않고도 ipset에서 면제된 IP를 쉽게 추가하거나 제거할 수 있으므로 관리가 더 쉽습니다.