Как элегантно избирательно исключить сетевой трафик FreeBSD из интерфейса OpenVPN по портам

Неопытный сисадмин тут.

Я планирую запустить сетевой демон в тюрьме FreeBSD через OpenVPN, но хочу иметь возможность SSH напрямую в тюрьму и использовать демон веб-интерфейса демона, не проходя через VPN. Насколько я понимаю, туннель OpenVPN обычно настраивается как виртуальный интернет-интерфейс по умолчанию, и поэтому входящий трафик будет передаваться по интерфейсу OpenVPN по умолчанию (что проблематично, так как это вызывает задержку).

Я подумал: "Ну, очевидно, поскольку весь этот трафик уходит на несколько портов, я просто перенаправлю их на шлюз без VPN". Я пытался искать решения, но почти все они используют iptables вместо ipfw (который по умолчанию для FreeBSD) и решают несколько другие проблемы. И альтернативные решения, такие как использование нескольких маршрутов по умолчанию для обеспечения того, чтобы входящий трафик на любом интерфейсе всегда отправлялся через один и тот же интерфейс, казались далеко идущими и требуют глубокого знания всех задействованных инструментов.

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

1 ответ

Решение

Если не используется что-то вроде Multipath TCP, соединения TCP никогда не изменят свой интерфейс. Если трафик поступает от удаленного хоста A в интерфейсе Y, ответы (в общем случае) уходят через интерфейс Y, даже если наилучший подходящий маршрут (к хосту A) может привести в другом месте. Если, конечно, этот интерфейс Y имеет маршрут, ведущий к хосту А.

OpenVPN в его наиболее часто используемых redirect-gateway def1 конфигурация не переписывает маршруты. Вместо этого он использует способ сопоставления маршрутов: выбирается наиболее конкретный маршрут сопоставления. Как правило, у вас есть 0.0.0.0/0 маршрут (он же маршрут по умолчанию), указывающий на ваш интернет-шлюз (или любой другой). Этот маршрут соответствует всему. Обычно присутствуют и более конкретные маршруты, ведущие к вашей локальной сети. OpenVPN создает два новых маршрута: 0.0.0.0/1 а также 128.0.0.0/1, Опять же, эти маршруты соответствуют всем, но выбираются поверх предыдущего маршрута по умолчанию, потому что они более конкретны. Итог: интерфейс Y все еще может достигать "всего".

Как правило, VPN-соединение не препятствует входящему трафику на других интерфейсах. Таким образом, он должен работать без дополнительной настройки.

Другие вопросы по тегам