Я установил соединение 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.