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