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

Использование iptables NAT для пересылки туннеля GRE

У меня есть два хоста, между которыми должен быть туннель GRE. Между ними у меня есть хост-ретранслятор, который должен выполнять NAT и перенаправлять трафик GRE в любом направлении.

grehostA --- natrelayhost --- grehostB

Все хосты работают под Debian. Для простоты объяснения я ограничусь трафиком, идущим от grehostA к grehostB и не беспокойтесь об обратном трафике. Мы смотрим на конфигурацию iptables для natrelayhost:

-t nat -A PREROUTING -p gre -s grehostA -d natrelayhost -j LOG --log-prefix "[netfilter] GRE-PRE: "
-t nat -A PREROUTING -p gre -s grehostA -d natrelayhost -j DNAT --to-destination grehostB

-t nat -A POSTROUTING -p gre -j LOG --log-prefix "[netfilter] GRE-POST: "
-t nat -A POSTROUTING -p gre ! -s natrelayhost -j MASQUERADE

-A FORWARD -p gre -j LOG --log-prefix "[netfilter] GRE-FWD: "
-A FORWARD -p gre -J ACCEPT

у меня тоже есть INPUT правила отладки, хотя я не думаю, что они мне нужны:

-A INPUT -p gre -j LOG --log-prefix "[netfilter] GRE-IN: "
-A INPUT -p gre -j ACCEPT

И конечно же sysctl -w net.ipv4.ip_forward=1.

У меня загружены следующие модули ядра:

modprobe nf_conntrack_proto_gre
modprobe nf_nat_proto_gre

А также несколько других модулей ядра, которые я не думаю, что мне нужны, но все же решил попробовать:

modprobe ip_gre
modprobe ip_conntrack_pptp
modprobe ip_nat_pptp

Эта проблема:

Когда трафик отправляется из grehostA Я получаю GRE-PRE сообщения журнала, показывающие, что правило DNAT выполнено. Но я не получаю GRE-POST/GRE-FWD/GRE-IN сообщения журнала, даже если POSTROUTING/FORWARD/INPUT цепочки настроены для регистрации и передачи всего трафика GRE. Похоже, никто никогда не проходит через них. После DNAT я ожидал увидеть здесь пакеты.

Я попытался добавить правила в начало соответствующих цепочек, чтобы убедиться, что никакие другие правила не принимают или не отклоняют трафик, но это не имеет значения.

Имейте в виду, что я добавлю в правила дополнительные проверки хоста источника / назначения, чтобы предотвратить несанкционированный доступ, как только я действительно заставлю его работать.

РЕДАКТИРОВАТЬ: исправлено путем добавления маршрута к хосту на natrelayhost к grehostB. Спасибо Томек!