Только туннелируйте определенные приложения через OpenVPN

Я купил решение VPN, оно работает правильно, когда в файле конфигурации есть "redirect-gateway def1" (маршрутизация всего трафика через VPN).

Однако, когда я удаляю эту строку из файла конфигурации, я все еще могу выполнить ping-запрос к машине (ping -I tap0), однако я не могу пропинговать IP-адрес, назначенный машине (это публичный ip), я получаю ошибку: Хост назначения недоступен.

Я только хочу, чтобы некоторые приложения отправляли трафик через VPN-туннель (например, ZNC, irssi), и все из них я могу выбрать, какой IP-адрес они используют. Однако они не могут получить никаких данных, что делает туннель практически бесполезным для меня при отключении redirect-gateway.

Любые идеи о том, как разрешить конкретным приложениям использовать туннель, не заставляя все проходить через него?

Мой файл конфигурации выглядит следующим образом:

dev tap
remote #.#.#.#
float #.#.#.#
port 5129
comp-lzo
ifconfig #.#.#.# 255.255.255.128
route-gateway #.#.#.#
#redirect-gateway def1
secret key.txt
cipher AES-128-CBC

Вывод ifconfig -a при подключении туннеля:

tap0      Link encap:Ethernet  HWaddr 00:ff:47:d3:6d:f3  
          inet addr:#.#.#.#  Bcast:#.#.#.#  Mask:255.255.255.255
          inet6 addr: <snip> Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:612 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:25704 (25.1 KiB)  TX bytes:6427 (6.2 KiB)

РЕДАКТИРОВАТЬ: Bcast:#.#.#.# (Ifconfig) отличается от маршрута-шлюза #. #. #. # (Openvpn), если это имеет какое-либо значение.

2 ответа

Я думаю, что вы можете сделать это с помощью iptables:

#!/bin/bash
# Create new routing table
echo 200 vpn >> /etc/iproute2/rt_tables

# assign iptables mark "1" to this table
ip rule add fwmark 1 table vpn

#next hop for the new routing table will be trough openvpn
ip route add table vpn eql nexthop via <remotevpnip> dev tap0

#with iptables, add mark "1" to the traffic that must be sent trough the vpn
# Sample using the -m owner iptables module
iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner <user> -j MARK --set-mark 0x01

Это работает для трафика udp & tcp, а не icmp.

Вероятно, вы пропустили маршрут на вашем устройстве для VPN. Что-то вроде добавления маршрута [СЕТЬ НА ДРУГОЙ СТОРОНЕ VPN] gw [Адрес VPN] должен помочь.

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