Туннельный трафик через OpenVPN


5

У меня есть Ubuntu Server, и я хотел бы отфильтровать трафик, и через VPN можно передавать только трафик определенных пользователей или групп, а остальную часть трафика - через стандартное интернет-соединение. Я думаю, это будет довольно легко сделать, но у меня много проблем с его настройкой.

Мне удалось успешно установить VPN-соединение с помощью:

openvpn --config '/etc/openvpn/Sweden.ovpn' --auth-user-pass '/etc/openvpn/pia.txt' --persist-key --persist-tun --tls-client --remote-cert-tls server --user vpn &

Файл конфигурации для OpenVPN содержит следующее:

client
dev tun
proto udp
remote sweden.privateinternetaccess.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0

Который создает новый интерфейс с именем "tun0". Использование этого интерфейса прекрасно работает:

curl -v --interface tun0 icanhazip.com

Однако, когда я пытаюсь использовать интерфейс eth0, время соединения истекает:

curl -v --interface eth0 icanhazip.com

Если я отключу соединение OpenVPN, то мой вызов curl через eth0 будет работать правильно.

Как только я смог заставить работать и eth0, и tun0, я планировал использовать нечто подобное этой команде для маршрутизации определенной группы через туннель OpenVPN:

iptables -A OUTPUT -m owner --gid-owner vpn \! -o tun0 -j REJECT

Кто-нибудь знает, как я мог заставить и eth0, и tun0 работать одновременно, чтобы я мог направлять через него трафик определенного пользователя / группы и оставлять весь другой трафик в покое?

Похожие посты: Как маршрутизировать определенный трафик через OpenVPN? - У меня в решателе только одна сетевая карта, в этом решении используются две сетевые карты.

Ответы:


2

Есть проблема с вашим curl- тестом, которую я знаю, как решить, и проблема с вашей схемой в целом, которую я могу предложить решение.

curl не может работать таким образом: после запуска VPN на этом интерфейсе не определено ни одного шлюза (eth0): у сетевого адаптера eth0 есть IP-адрес, и он может достичь вашей локальной сети, но нет шлюза, с которого можно подключиться к Интернету и icanhazip. .com, в частности, может быть достигнуто. Чтобы curl работал таким образом, вам нужно будет указать ядру, что конкретный маршрут к 216.69.252.101 (icanhazip.com) проходит через интерфейс eth0 :

   ip ro add 216.69.252.101 via your_home_routers_IP_address

Теперь вызов curl будет работать так, как вы пожелаете.

Если вы хотите общаться как через VPN, так и за ее пределами на стабильной, полной основе, правильный путь для продолжения - установить вторую таблицу маршрутизации с помощью маршрутизации на основе политик . Вы можете найти хорошее и краткое введение в тему Дэвида Шварца на родственном сайте здесь. Причина, по которой вам нужно это устройство, состоит в том, что вы представляете систему с двумя различными шлюзами, которые не допускаются, если, конечно, нет двух различных таблиц маршрутизации.

Теперь для достижения вашей цели, т. Е. Для маршрутизации пакетов по разным маршрутам в соответствии с идентификацией пользователя, вам нужно будет установить соответствующие правила, которые выбирают соответствующую таблицу маршрутизации. Итак, давайте предположим, что теперь у вас есть две таблицы, называемые vpn и novpn. Сначала вам нужно будет использовать таблицу mangle iptables, чтобы пометить пакеты в соответствии с идентификацией пользователя, а затем предоставить правила для маршрутизации на основе политик в соответствии с наличием (или отсутствием) указанной метки.

Это может работать так:

  iptables -t mangle -I OUTPUT -m owner --uid-owner some-user -j MARK --set-mark 100
  ip rule add fwmark 100 table vpn

для пользователя, предназначенного для использования vpn, и

  iptables -t mangle -I OUTPUT -m owner --uid-owner some-other-user -j MARK --set-mark 300
  ip rule add fwmark 300 table novpn

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


Спасибо. Мне нужно будет читать дальше в создании таблиц маршрутизации, но это хорошая отправная точка.
Алекс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.