NAT GRE (протокол IP 47) через маршрутизатор Linux
У меня есть хост, который имеет постоянный статический туннель GRE к серверу в Интернете. Прямо сейчас у хоста есть собственный реальный IP-адрес. Я хочу поместить хост за коробкой Linux (Smoothwall) и назначить ему частный IP-адрес.
Давай позвоним:
tunnel-server-ip = IP конца туннеля, к которому подключается хост (в интернете)
real-ip = реальный IP-адрес, используемый в данный момент хостом, который я хочу назначить маршрутизатору Linux
false-ip = IP-адрес, который получит хост после его установки за брандмауэром Linux
This is what I think I have to do for the tunnel to work:
- DNAT all incoming IP GRE packets on the external interface coming from the internet tunnel end, and send them to host. That is change the destination from real-ip to false-ip and send the packet to false-ip
- SNAT all incoming IP GRE packets coming on the internal interface coming from the host to appear they are generated by the Linux box and send them to the tunnel server. That is change the source field from false-ip to real-ip and send the packet to tunnel-server-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
Running this results in No chain/target/match by that name. Could you please tell me what I did wrong? Я на правильном пути?
4 ответа
Вы забыли -t nat
настольный выключатель в инструкциях ПРОГНОЗИРОВАНИЕ / РАЗМЕЩЕНИЕ. Просто добавьте это на фронте.
Поздний ответ, но я столкнулся с одной и той же потребностью, и две следующие команды добились цели:
# 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
трекер соединения делает свое дело.
Похоже, вы забыли сказать "--table nat", поэтому он входит в таблицу фильтров, в которой нет целей SNAT/DNAT и цепочек PREROUTING и POSTROUTING.
Для большинства туннелей GRE вы должны иметь протокол управления по TCP 1723. Это также необходимо переадресовать. Вот ссылка, которая описывает конфигурацию iptables для этого. Вы на правильном пути, просто пропустите контрольный протокол.