Назад | Перейти на главную страницу

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-сервером и отправляют их на сервер туннеля. То есть изменить исходное поле с ложный 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

Запуск этого приводит к Нет цепочки / цели / совпадения с таким именем. Не могли бы вы сказать мне, что я сделал не так? Я на правильном пути?

Ты забыл -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.