У меня есть хост, который имеет постоянный статический туннель GRE к серверу в Интернете. Прямо сейчас у хоста есть свой собственный реальный IP-адрес. Я хочу разместить хост за Linux-боксом (Smoothwall) и назначить ему частный IP-адрес.
Давай позвоним:
туннельный-сервер-ip= IP-адрес конца туннеля, к которому подключается хост (в Интернете)
реальный ip= реальный IP-адрес, используемый в данный момент хостом, который я хочу назначить маршрутизатору Linux
ложный-ip= IP-адрес, который получит хост после того, как он будет помещен за брандмауэр Linux
Вот что, по моему мнению, нужно сделать, чтобы туннель заработал:
- DNAT все входящие IP GRE пакеты на внешнем интерфейсе, поступающие с конца интернет-туннеля, и отправлять их на хост. Это изменение назначения среальный ipкложный-ipи отправьте пакетложный-ip
- SNAT все входящие IP GRE пакеты, поступающие на внутренний интерфейс, исходящие от хоста, чтобы они выглядели как сгенерированные Linux box и отправляли их на туннельный сервер. То есть изменить поле источника сложный-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.