Назад | Перейти на главную страницу

Маршрутизация трафика определенного пользователя через VPN, но при этом разрешить локальную сеть

Итак, я хочу направить определенный трафик через VPN-соединение, а остальной - через обычное интернет-соединение. Я хочу запустить несколько разных программ, и большинство из них не поддерживает привязку к определенному сетевому интерфейсу (tun0 в моем случае).

Мне удалось отправить трафик конкретного пользователя через VPN, следуя приведенным здесь ответам: iptables - Цель для маршрутизации пакета к определенному интерфейсу?

Но, к сожалению, когда я запускаю сервер, который подключается к Интернету и имеет веб-интерфейс, работающий на локальном IP (127.0.0.1/192.168.0.*) весь интернет-трафик корректно проходит через tun0, но я не могу подключиться к веб-интерфейсу с локального IP-адреса как другой пользователь.

Когда я вхожу в систему как пользователь с VPN, я могу получить доступ к службам, работающим на локальных IP-адресах, но другие пользователи / машины не могут получить доступ к каким-либо серверам, которые я запускаю.

Может кто-то указать мне верное направление?

сначала добавьте правила брандмауэра:

iptables -t mangle -A OUTPUT -m owner --uid USER -j MARK --set-mark 1
iptables -t nat -A POSTROUTING -m mark --mark 1 -j MASQUERADE

затем добавьте правило маршрутизации:

ip rule add fwmark 0x1 table 100

а затем добавьте маршруты в новую таблицу маршрутизации:

ip route add SOMEROUTE via SOMEGATEWAY table 100

Вы должны настроить статический маршрут для сети, которая находится на другой стороне VPN. Обычно все маршрутизируется по маршруту по умолчанию, если вы не укажете явный маршрут.

Скажем, например, сеть за VPN будет 10.10.42.0/24, тогда вы добавите статический маршрут с помощью

ip route add 10.10.42.0/24 dev tun0

Это отправляет весь трафик для этой подсети через tun0