전체 /24 서브네트워크의 Linux iptables NAT

전체 /24 서브네트워크의 Linux iptables NAT

내 목적은 모든 포트와 프로토콜에서 eth0에 도달하는 모든 IP 주소를 다음과 같이 NAT(변환)하는 것입니다. 192.168.55.x -> 192.168.42.x(IP 전달이 활성화되어 있고 192.168.42.0/24 하위 네트워크가 eth1에 있습니다. ). 예를 들어 x=20인 경우 다음과 같이 한 쌍의 라인당 하나의 호스트에 대해 이 작업을 수행할 수 있습니다.

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.20 -j DNAT --to 192.168.42.20
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20 -j SNAT --to 192.168.55.20

하지만 가능한 253개의 호스트를 모두 번역하는 방법을 찾을 수 없습니다. 나는 이것을 시도했다:

iptables -t nat -A PREROUTING -i eth0 -d 192.168.55.0/24 -j DNAT --to 192.168.42.0-192.168.42.255
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.42.20/24 -j SNAT --to 192.168.55.0-192-168.55.255

이로 인해 임의의 호스트 변환이 발생합니다. 로드 밸런싱에 유용합니다. 하지만 어떻게 평범한 일대일 번역을 얻을 수 있을까요?

감사합니다.

답변1

에서 man iptables-extensions:

NETMAP
이 대상을 사용하면 전체 주소 네트워크를 다른 주소 네트워크에 정적으로 매핑할 수 있습니다. 이는 nat 테이블의 규칙에서만 사용할 수 있습니다.

따라서 하나의 규칙만 필요합니다.

iptables -t nat -A PREROUTING -d 192.168.55.0/24 -i eth0 -j NETMAP --to 192.168.42.0/24

처음에 "42" 네트에서 시작된 연결을 올바르게 표시하려면 다음 두 번째 규칙을 완료하세요.

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eth0 -j NETMAP --to 192.168.55.0/24

관련 정보