Как элегантно избирательно исключить сетевой трафик 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-соединение не препятствует входящему трафику на других интерфейсах. Таким образом, он должен работать без дополнительной настройки.