Используйте устройство 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

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

Fyi: Когда я настраиваю OpenVPN для создания интерфейса TAP (вместо TUN), я получаю сообщение об ошибке "Узел назначения недоступен"

Информация 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

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

2 ответа

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

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

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

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

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.

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