NAT GRE (IP-протокол 47) через маршрутизатор Linux

NAT GRE (IP-протокол 47) через маршрутизатор Linux

У меня есть хост, который имеет постоянный статический туннель GRE к серверу в Интернете. Прямо сейчас у хоста есть свой собственный реальный IP-адрес. Я хочу разместить хост за Linux-боксом (Smoothwall) и назначить ему частный IP-адрес.

Давай позвоним:
туннельный-сервер-ip= IP-адрес конца туннеля, к которому подключается хост (в Интернете)
реальный ip= реальный IP-адрес, используемый в данный момент хостом, который я хочу назначить маршрутизатору Linux
ложный-ip= IP-адрес, который получит хост после того, как он будет помещен за брандмауэр Linux

Вот что, по моему мнению, нужно сделать, чтобы туннель заработал:

  1. DNAT все входящие IP GRE пакеты на внешнем интерфейсе, поступающие с конца интернет-туннеля, и отправлять их на хост. Это изменение назначения среальный ipкложный-ipи отправьте пакетложный-ip
  2. 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.

Связанный контент