인터넷 서버에 대한 영구적인 정적 GRE 터널이 있는 호스트가 있습니다. 현재 호스트에는 자체 실제 IP 주소가 있습니다. 호스트를 Linux 상자(Smoothwall) 뒤에 두고 개인 IP 주소를 할당하고 싶습니다.
전화하자:
터널-서버-IP= 호스트가 (인터넷에서) 연결하고 있는 터널 끝의 IP
실제 IP= Linux 라우터에 할당하려는 호스트가 현재 사용하고 있는 실제 IP
거짓 IP= 호스트가 Linux 방화벽 뒤에 배치된 후 얻게 될 IP
터널이 작동하려면 다음과 같이 해야 한다고 생각합니다.
- 인터넷 터널 끝에서 들어오는 외부 인터페이스의 모든 수신 IP GRE 패킷을 DNAT하여 호스트로 보냅니다. 즉, 목적지를 다음에서 변경합니다.실제 IP에게거짓 IP그리고 그 패킷을 다음 주소로 보내세요.거짓 IP
- 호스트에서 들어오는 내부 인터페이스를 통해 들어오는 모든 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 nat
PREROUTING/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
연결 추적기가 작동합니다.gre
gre
답변3
대부분의 GRE 터널의 경우 TCP 1723에 제어 프로토콜이 있어야 합니다. 이 프로토콜도 전달되어야 합니다. 여기에는링크이에 대한 iptables 구성을 설명합니다. 당신은 올바른 길을 가고 있습니다. 단지 제어 프로토콜이 누락되었을 뿐입니다.
답변4
"--table nat"라고 말하는 것을 잊어버린 것 같으므로 SNAT/DNAT 대상이 없고 PREROUTING 및 POSTROUTING 체인도 없는 필터 테이블로 이동합니다.