На самом деле фальсики оболочки и выполняют команду. Но каждый раз команда (которая не является встроенным), выполняется, оболочки вилки. Вот так работает снаряды, и это неизбежно.
Примечание. Оболочка не переводит ничего. Команда Echo
может. Но вы можете использовать PrintF
вместо этого:
your_shell -c 'bar=$(cat foo); printf %s "$bar"'
На сервере 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 в трех случаях
по умолчанию
, потому что это единственный, который соответствует PUBLIC_IP
. Он отправляется для маршрутизации на IP-адрес 10.199.115.1
, с конечным адресатом PUBLIC_IP
и исходным адресом 10.199.115.146
. PUBLIC_IP / 32
, который отправляет пакет для маршрутизации на машине 10.0.2.2
на ] eth0
, который, я полагаю, является машиной A (соединение, лежащее в основе openvpn). 10.199.115.146
. Без правила, которое я вам показал, это будет интерпретироваться как интернет-адрес, и, следовательно, ответ будет отправлен через Интернет. tun0
на машину F. Машина F направляет его обратно на eth1
, где машина B получает ответный пакет.
Однако его источник помечен как 10.1.1.1
, поэтому он не распознается как ответ на исходный пакет. Пинг не удался. tun0
tun0
, срабатывает правило MASQUERADE
, меняя источник пакета как 10.1.1.2
. (это не требуется при использовании предложенного мной правила маршрута, см. ниже). 10.1.1.2
(машина F). Без MASQUERADE
это было бы отправлено обратно на 10.199.115.146
. С моей предложенной записью в таблице маршрутизации это не сильно изменится, потому что пакет будет отправлен на 10.1.1.2
для маршрутизации, тем не менее, если у вас нет ни одного из пунктов назначения, 10.199.115.146
будет маршрутизироваться через Интернет. 10.199.115.146
. Пакет направляется через eth1
к его конечному месту назначения. 10.1.1.2
для маршрутизации с адресом источника = 10.1.1.1
. eth1
. 10.1.1.1
. tun0
. Правило MASQUERADE
изменяет адрес источника на 10.1.1.2
. 10.1.1.2
, который не является исходным адресатом, и отбрасывает его как несвязанный. Ping failed Как видите, есть 2 способа подключить машины из внутренней сети к VPN:
Не используйте оба. Если вы используете SNAT / MASQUERADE, таблицы маршрутизации на внешних хостах неприменимы, потому что пакет, приходящий из частной сети, никогда не использует исходный адрес в качестве источника.
Вы можете выбрать, должен ли компьютер A быть доступен из B с помощью PUBLIC_IP
или 10.1.1.1
. Возможно, можно настроить брандмауэр так, чтобы оба работали, но, вероятно, это не стоит усилий.