Туннель Linux GRE имеет два параметра: локальный адрес и удаленный адрес. Предположим, у меня есть два маршрутизатора, левый находится за пределами NAT, а правый - внутри NAT, тогда я хочу создать туннель GRE между левым и правым маршрутизаторами. Я понимаю правую сторону, где локальный адрес должен быть собственным адресом, а удаленный адрес должен быть публичным адресом однорангового узла. Но что касается левой стороны, я думаю, что маршрутизатор не будет знать адрес однорангового узла перед подключением, тогда как мне установить для него «удаленный» адрес?
Заранее спасибо. -вуди
Для других протоколов следует поступать так, как ожидалось: для пультов следует указывать только общедоступные IP-адреса.
Пример:
left
: 192.0.2.10
Система NAT: 198.51.100.20 / 192.168.0.1
right
(за NAT): 192.168.0.30
(И, например, вы настраиваете IP-адреса туннеля для left
10.10.10.1/24 и right
10.10.10.2/24, тут не важно)
Вам нужно сказать left
маршрутизатор, который remote
198.51.100.20, а для right
маршрутизатор, remote
это 192.0.2.10.
Теперь нюанс: это действительно зависит от настроек системы NAT. если он работает под Linux.
Если эта система NAT также является Linux,
right
для протокола gre (47), если он не имеет общего правила (но см. ниже),modprobe nf_conntrack_proto_gre
, или NAT не произойдет, и туннель не будет работать. Как ни странно, из тестов, nf_nat_proto_gre
не кажется необходимым (и одного недостаточно).DNAT
к SNAT/MASQUERADE
то только right
должен инициировать движение к left
. Если left
направляет трафик на right
(фактически в систему NAT) после бездействия это не сработает, и запись conntrack может предотвратить до 30 секунд (после завершения попыток) right
установить трафик на left
. После «установки» таймер «ОК» увеличивается до 180 с. Так что вам действительно стоит подумать о добавлении DNAT
правило от left
к right
завершить противоположное SNAT/MASQUERADE
правило.В такой системе NAT Linux вы можете проверить, что происходит, используя conntrack -L -p gre
, в нем должна быть запись после активности туннеля GRE, или правильный модуль отсутствует.