iptables
자동화된 방식으로 여러 컴퓨터에 이를 배포하는 데 사용할 포트 전달 규칙을 작성했습니다.안시푸르. 그러나 POSTROUTING
체인 규칙에서는 전달된 패킷을 수신하는 시스템이 응답할 위치를 알 수 있도록 소스 주소를 로컬 시스템의 주소로 수정해야 합니다. 규칙은 다음과 같습니다.
iptables -t nat -A POSTROUTING -d 192.168.11.2 -o eth1 -p tcp --dport 22 -j SNAT --to-source 192.168.11.1
즉, DNAT를 사용하여 PREROUTING
대상 주소를 192.168.11.2로 변경하고 ping한 후 패킷을 네트워크로 보내기 전에 네트워크 헤더에서 소스 주소를 변경 ACCEPT
해야 합니다 .SNAT
--to-source
"로컬 머신의 IP"가 되어야 함 을 기호적으로 지정하기 위해 이 규칙을 작성할 수 있습니까 ? 필요한 명령을 일련의 파이프 명령으로 컴파일하여 이를 달성합니다.
iptables -t nat -A POSTROUTING -d 192.168.11.2 -o eth1 -p tcp --dport 22 -j SNAT --to-source $(ifconfig eth1 | grep -i "inet " | awk '{print $2}')
그러나 내 의도는 iptables
구성 파일을 생성하여 가능하면 모든 컴퓨터에 배포하는 것입니다.
답변1
iptables 구성 스크립트는 단지 쉘 스크립트입니다. "일반적인" 방법으로 로컬 IP 주소를 변수에 추가할 수 있습니다.
LOCALIP=`hostname -i`
그런 다음 하드코딩된 IP 주소 인스턴스를 다음으로 대체합니다.
$LOCALIP
답변2
SNAT 대신 MASQUERADE 대상을 사용할 수 있습니다.
당신은 읽고 싶을 수도 있습니다SNAT와 가장 무도회의 차이점그러나 MASQUERADE에는 오버헤드가 있습니다.