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

Используйте устройство OpenVPN tun для конкретного запроса

Я установил соединение OpenVPN с route-nopull конфигурация. Таким образом, теперь в конфигурацию клиента не добавлены специальные маршруты, и создается только устройство TUN, например:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:13.0.9.88  P-t-P:13.0.9.88  Mask:255.255.255.224
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:150 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:12498 (12.4 KB)  TX bytes:2520 (2.5 KB)

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

И в этом моя проблема: как мне это сделать? В основном я собираюсь использовать это в node.js.

В следующем примере я создаю простой запрос GET с помощью http.request, но указываю адрес, который в настоящее время передается интерфейсу TUN.

var http = require('http'),
    url  = require('url');

var options = {
    localAddress: '13.0.9.88',
    hostname: 'www.google.be',
    path: '/',
    method: 'GET',
    port: 80
};

var req = http.request(options, function(res) {
    res.setEncoding('utf8');

    res.on('data', function (chunk) {
        console.log('Body: ' + chunk);
    });
});

req.end();

Проблема в том, что этот запрос никогда не проходит и не получает ответа.

Я также попробовал более простой тест, просто используя ping над tun0 интерфейс с одним из серверов Google:

 ping -I tun0 173.194.112.24

Это опять же не дает результатов.

К сведению: когда я настраиваю OpenVPN для создания интерфейса TAP (вместо интерфейса TUN), я получаю сообщение об ошибке «Destination Host Unreachable».

Информация netstat ip vpn:

# netstat -rn | fgrep 13.0.9
13.0.9.88      0.0.0.0         255.255.255.224 U         0 0          0 tun0

Какие маршруты мне нужно добавить, чтобы включить это?

После долгих поисков я нашел ответ в этом блоге Джорджи Кейси:

В no-pull config остается, но после каждого подключения нужно добавлять следующие маршруты:

ip route add default via  {{P-t-P-IP}}          dev tun0 table 10
ip rule add from          {{tun0-inet addres}}  table 10

Эти значения вы можете получить, например, из ifconfig (ips изменено):

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:16.0.2.11  P-t-P:16.0.2.11  Mask:255.255.255.224
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:66 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:5344 (5.3 KB)  TX bytes:2295 (2.2 KB)

Вам нужно добавить маршруты для пунктов назначения, которые вы хотите маршрутизировать через VPN-туннель, например:

route add <destip> gw <server IP>

куда <destip> это IP-адрес назначения, который вы хотите маршрутизировать через VPN, и <server ip>это IP-адрес сервера OpenVPN в 13.0.9. сеть.

Кстати, вы не должны использовать публично маршрутизируемые IP-адреса в частных VPN. Вы должны использовать некоторые из сетей, определенных в RFC1918.

Увидев ваш исходный вопрос Настройте openvpn только как интерфейсное устройство , вы должны удалить route-nopull в конфигурации вашего клиента и удалите push "redirect-gateway def1" из файла конфигурации сервера.

Затем вы можете добавить:

push "route <serverip> 255.255.255.255"

в файл конфигурации сервера. Это говорит серверу сказать клиенту о маршрутизации <serverip> через сервер OpenVPN.