iptables перенаправляют трафик от интерфейса VPN для следующего взаимодействия через интерфейс

На самом деле фальсики оболочки и выполняют команду. Но каждый раз команда (которая не является встроенным), выполняется, оболочки вилки. Вот так работает снаряды, и это неизбежно.

Примечание. Оболочка не переводит ничего. Команда Echo может. Но вы можете использовать PrintF вместо этого:

your_shell -c 'bar=$(cat foo); printf %s "$bar"'
0
30.08.2014, 02:27
1 ответ

На сервере A отсутствует маршрут, предлагающий подключиться к сети 10.199.115.0/24 через VPN, поэтому он использует маршрут по умолчанию (т. Е. Попытайтесь связаться с B через ваш общедоступный IP-адрес). ).

Попробуйте проверить, позволяет ли запуск

ip route add 10.199.115.0/24 via 10.1.1.2

на сервере A подключаться от A к B (без каких-либо правил NAT на брандмауэре F).

Если это работает, вы можете настроить openvpn для автоматического создания маршрута для вас, когда вы запускаете соединение с A

Объяснение того, что происходит в вашей конфигурации.

Вот как происходит маршрутизация / NAT в трех случаях

Случай 1: B проверяет PUBLIC_IP

  • Пакет покидает B, используя маршрут по умолчанию , потому что это единственный, который соответствует PUBLIC_IP . Он отправляется для маршрутизации на IP-адрес 10.199.115.1 , с конечным адресатом PUBLIC_IP и исходным адресом 10.199.115.146 .
  • Пакет маршрутизируется с помощью F. Применяется множество маршрутов: наиболее конкретным является PUBLIC_IP / 32 , который отправляет пакет для маршрутизации на машине 10.0.2.2 на ] eth0 , который, я полагаю, является машиной A (соединение, лежащее в основе openvpn).
  • Машина A получает пакет и отвечает на исходный адрес 10.199.115.146 . Без правила, которое я вам показал, это будет интерпретироваться как интернет-адрес, и, следовательно, ответ будет отправлен через Интернет.
  • используя предложенный мной маршрут, пакет возвращается через tun0 на машину F. Машина F направляет его обратно на eth1 , где машина B получает ответный пакет. Однако его источник помечен как 10.1.1.1 , поэтому он не распознается как ответ на исходный пакет. Пинг не удался.

Случай 2: B ping 10.1.1.1

  • Как и раньше, пакет оставляет B для маршрутизации с помощью F
  • На этот раз пункт назначения соответствует правилу 10.1.1.1/32, поэтому пакет отправляется через tun0
  • Когда пакет проходит через tun0 , срабатывает правило MASQUERADE , меняя источник пакета как 10.1.1.2 . (это не требуется при использовании предложенного мной правила маршрута, см. ниже).
  • Машина A получает пакет и отвечает на 10.1.1.2 (машина F). Без MASQUERADE это было бы отправлено обратно на 10.199.115.146 . С моей предложенной записью в таблице маршрутизации это не сильно изменится, потому что пакет будет отправлен на 10.1.1.2 для маршрутизации, тем не менее, если у вас нет ни одного из пунктов назначения, 10.199.115.146 будет маршрутизироваться через Интернет.
  • Ответный пакет получен машиной F. Если маскарад был выполнен, пакет распознается как ответ, и его адрес назначения изменяется обратно на 10.199.115.146 . Пакет направляется через eth1 к его конечному месту назначения.
  • Машина B распознает это как ответный пакет. Пинг прошел успешно.

Случай 3: эхо-запрос 10.199.115.146

  • Без предложенного мной правила исходный пакет отправляется в Интернет и теряется. В противном случае он отправляется на 10.1.1.2 для маршрутизации с адресом источника = 10.1.1.1 .
  • Машина F принимает пакет и направляет его через eth1 .
  • Пакет получен B, и ответ отправлен на 10.1.1.1 .
  • Ответ направляется через tun0 . Правило MASQUERADE изменяет адрес источника на 10.1.1.2 .
  • Машина A получает ответ от 10.1.1.2 , который не является исходным адресатом, и отбрасывает его как несвязанный. Ping failed

Как видите, есть 2 способа подключить машины из внутренней сети к VPN:

  • Public Routing: Обе сети знают IP-адреса друг друга, и у них есть определенные записи в таблице маршрутов для их поиска (как один я вам показал).
  • SNAT / MASQUERADE: Только одна сеть знает, как связаться с другой, и межсетевой экран изменяет исходный IP-адрес исходящих пакетов из этой сети на собственный IP-адрес межсетевого экрана (который известен другой сети).

Не используйте оба. Если вы используете SNAT / MASQUERADE, таблицы маршрутизации на внешних хостах неприменимы, потому что пакет, приходящий из частной сети, никогда не использует исходный адрес в качестве источника.

Вы можете выбрать, должен ли компьютер A быть доступен из B с помощью PUBLIC_IP или 10.1.1.1 . Возможно, можно настроить брандмауэр так, чтобы оба работали, но, вероятно, это не стоит усилий.

1
28.01.2020, 02:52

Теги

Похожие вопросы