Linux 라우터를 통한 NAT GRE(IP 프로토콜 47)

Linux 라우터를 통한 NAT GRE(IP 프로토콜 47)

인터넷 서버에 대한 영구적인 정적 GRE 터널이 있는 호스트가 있습니다. 현재 호스트에는 자체 실제 IP 주소가 있습니다. 호스트를 Linux 상자(Smoothwall) 뒤에 두고 개인 IP 주소를 할당하고 싶습니다.

전화하자:
터널-서버-IP= 호스트가 (인터넷에서) 연결하고 있는 터널 끝의 IP
실제 IP= Linux 라우터에 할당하려는 호스트가 현재 사용하고 있는 실제 IP
거짓 IP= 호스트가 Linux 방화벽 뒤에 배치된 후 얻게 될 IP

터널이 작동하려면 다음과 같이 해야 한다고 생각합니다.

  1. 인터넷 터널 끝에서 들어오는 외부 인터페이스의 모든 수신 IP GRE 패킷을 DNAT하여 호스트로 보냅니다. 즉, 목적지를 다음에서 변경합니다.실제 IP에게거짓 IP그리고 그 패킷을 다음 주소로 보내세요.거짓 IP
  2. 호스트에서 들어오는 내부 인터페이스를 통해 들어오는 모든 IP GRE 패킷을 SNAT하여 Linux 상자에서 생성된 것처럼 보이게 하고 터널 서버로 보냅니다. 즉, 소스 필드를 다음에서 변경합니다.거짓 IP에게실제 IP그리고 그 패킷을 다음 주소로 보내세요.터널-서버-IP

나는 다음 스크립트를 생각해 냈습니다.

tunnel_server_ip=217.x.x.x
false_ip=192.168.2.2
real_ip=82.x.x.x
/sbin/iptables -A PREROUTING -p 47 --src $tunnel_server_ip -j DNAT --to-destination $false_ip 
/sbin/iptables -A POSTROUTING -p 47 --src $false_ip -j SNAT --to-source $real_ip    
/sbin/iptables -A INPUT -p 47 -j ACCEPT

이를 실행하면 다음과 같은 결과가 나타납니다.해당 이름과 일치하는 체인/타겟/일치가 없습니다. 내가 뭘 잘못했는지 말해줄 수 있나요? 나는 올바른 길을 가고 있습니까?

답변1

-t natPREROUTING/POSTROUTING 명령어에서 테이블 스위치를 잊어버렸습니다 . 앞쪽에 추가해주시면 됩니다.

답변2

답변이 늦었지만 동일한 요구 사항을 발견했으며 다음 두 명령이 트릭을 수행합니다.

# iptables -t nat -A PREROUTING -i eth0 -p gre -j DNAT --to-destination 192.168.0.1
# modprobe nf_conntrack_proto_gre

실제 IP를 지정할 필요 없이 개인 서버로의 트래픽만 연결하면 PREROUTE연결 추적기가 작동합니다.gregre

답변3

대부분의 GRE 터널의 경우 TCP 1723에 제어 프로토콜이 있어야 합니다. 이 프로토콜도 전달되어야 합니다. 여기에는링크이에 대한 iptables 구성을 설명합니다. 당신은 올바른 길을 가고 있습니다. 단지 제어 프로토콜이 누락되었을 뿐입니다.

답변4

"--table nat"라고 말하는 것을 잊어버린 것 같으므로 SNAT/DNAT 대상이 없고 PREROUTING 및 POSTROUTING 체인도 없는 필터 테이블로 이동합니다.

관련 정보