iptables: 포트 리디렉션을 "재정의"하는 방법은 무엇입니까?

iptables: 포트 리디렉션을 "재정의"하는 방법은 무엇입니까?

내 설정은 다음과 같습니다.

두 개의 인터페이스 eth0eth1. 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 세트( )를 생성한 다음 DNATSNAT규칙에 반전된 일치 항목을 추가하는 것입니다.

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를 쉽게 추가하거나 제거할 수 있으므로 관리가 더 쉽습니다.

관련 정보