У меня есть хост с постоянным статическим GRE-туннелем к серверу в Интернете. Прямо сейчас у хоста есть свой реальный IP-адрес. Я хочу разместить хост за ящиком Linux (Smoothwall) и назначить ему частный IP-адрес.
Давай позвоним:
туннель-сервер-IP = IP-адрес конца туннеля, к которому подключен хост (в Интернете)
реальный IP = реальный IP-адрес, используемый в настоящее время хостом, который я хочу назначить маршрутизатору Linux
ложный IP = IP, который получит хост после того, как он будет помещен за брандмауэр Linux
Вот что мне нужно сделать, чтобы туннель заработал:
Я придумал следующий сценарий:
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
Запуск этого приводит к Нет цепочки / цели / совпадения с таким именем. Не могли бы вы сказать мне, что я сделал не так? Я на правильном пути?
Ты забыл -t nat
table в инструкциях PREROUTING / POSTROUTING. Просто добавьте его впереди.
Поздний ответ, но я столкнулся с той же потребностью, и две следующие команды помогают:
# 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
трекер подключений делает свое дело.
Для большинства туннелей GRE у вас должен быть протокол управления TCP 1723. Он также должен быть переадресован. Вот Ссылка на сайт который описывает конфигурацию iptables для этого. Вы на правильном пути, просто не хватает протокола управления.
Похоже, вы забыли сказать --table nat, поэтому он попадает в таблицу фильтров, в которой нет целей SNAT / DNAT, а также цепочек PREROUTING и POSTROUTING.