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

968
Polygonica

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

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

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

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

1

1 ответ на вопрос

1
Daniel B

Unless something like Multipath TCP is used, TCP connections won’t ever change their interface. If traffic arrives from remote host A at interface Y, answers will (generally) leave through interface Y, even if the best matching route (to host A) might lead elsewhere. Provided, of course, that interface Y has a route leading to host A.

OpenVPN in its most-used redirect-gateway def1 configuration does not overwrite routes. Instead, it leverages how route matching is done: The most specific matching route is selected. Generally, you’d have a 0.0.0.0/0 route (aka default route) pointing at your internet gateway (or whatever). This route matches everything. More specific routes are usually present too, leading to your local network(s). OpenVPN creates two new routes: 0.0.0.0/1 and 128.0.0.0/1. Again, these routes match everything, but are selected over your previous default route, because they are more specific. Bottom line: Interface Y can still reach “everything”.

Generally, a VPN connection does not hinder incoming traffic on other interfaces. As such, it should work without additional setup.

Спасибо! Мне любопытно, хотя (хотя я возьму то, что вы говорите за чистую монету): есть ли какая-либо документация, которую я могу прочитать, которая скажет мне, что соединения TCP связаны с интерфейсами? Я немного погуглил соответствующую документацию, но я до сих пор не уверен, как мог сам предсказать это. Polygonica 9 лет назад 0
Это по определению: конечная точка TCP определяется IP-адресом и портом TCP. Конечные точки TCP в соединении являются фиксированными, так как соединение определяется двумя конечными точками. Во всех конфигурациях, кроме специальных, каждый IP-интерфейс на машине имеет уникальный IP-адрес. Поэтому, если не установить новое соединение, все исправлено. Daniel B 9 лет назад 0