Я пытаюсь создать две сети (используя сервер debian):
Моя текущая топология:
eth0
подключен к моему маршрутизатору ISP: (192.168.1.0/24)eth1
(10.0.0.1) подключен к моей локальной сети (10.0.0.0/16)eth1:1
(10.1.0.1) подключен к моей локальной сети (10.1.0.0/16)ppp0
это мое L2TP / IPSec соединениеЕсли клиент использует 10.0.0.1 в качестве маршрутизатора, он проходит через eth0, если клиент использует 10.1.0.1 в качестве маршрутизатора, он получает через ppp0. Итак, для этого я создал два правила IPTables:
iptables -A POSTROUTING -t nat -o eth0 -s 10.0.0.0/16 -j MASQUERADE
iptables -A POSTROUTING -t nat -o ppp0 -s 10.1.0.0/16 -j MASQUERADE
Первая сеть (10.0.0.0/16) работает хорошо, нат маскарад работает отлично. А вот со вторым (10.1.0.0/16) вообще не работает.
Я уверен, что ppp0 работает, потому что если я изменю маршрут по умолчанию на моем сервере, чтобы использовать адрес ppp0, traceroute google.com
показывает мне, что я иду через VPN.
У меня вопрос: а почему не работает с нат?
Я подозреваю, что возникла проблема с вашими правилами маршрутизации. Вам необходимо указать, какие адреса назначения выходят из каких интерфейсов. Вероятно, в настоящее время все просто выходит из шлюза по умолчанию. Эти правила POSTROUTING применяются после завершения маршрутизации.
Ваша проблема, скорее всего, связана с шифрованием, в которое ваш IPSec-туннель инкапсулирует ваш пакет. Для правильной пересылки пакетов Natting вам нужны заголовки назначения и источника, однако ваш IPSec-туннель инкапсулирует эти пакеты и шифрует их, что делает невозможным для вашего маршрутизатора направить движение.
В зависимости от модели и сборки вашего маршрутизатора есть несколько распространенных решений. Оборудование Cisco может обойти это с помощью список контроля доступа
Справочная документация: VPN и Наттинг объяснили