Маршрутизация всего трафика через OpenVPN


39

Да, этот вопрос задавался сто раз, и я искал везде, но безрезультатно.

Название говорит само за себя.

У меня есть сервер OpenVPN (в Ubuntu), и я могу подключиться к нему через мой клиент (Windows 8) ...

Проблема начинается, когда я пытаюсь направить ВСЕ трафик через VPN.

Я добавил pushфлаги в server.conf:

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"

Когда я соединяюсь с клиентом, клиент выводит:

Wed May 07 21:38:40 2014 SENT CONTROL [StretchVPN-CA]: 'PUSH_REQUEST' (status=1)
Wed May 07 21:38:41 2014 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 8.8.8.8,route-gateway <Remote Router IP>,ping 10,ping-restart 120,ifconfig 192.168.0.201 255.255.255.0'
Wed May 07 21:38:41 2014 OPTIONS IMPORT: timers and/or timeouts modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: --ifconfig/up options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: route options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: route-related options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed May 07 21:38:41 2014 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed May 07 21:38:41 2014 open_tun, tt->ipv6=0
Wed May 07 21:38:41 2014 TAP-WIN32 device [Local Area Connection 4] opened: \\.\Global\{1F145805-92FC-454E-8FD9-0A6017DD4AD1}.tap
Wed May 07 21:38:41 2014 TAP-Windows Driver Version 9.9
Wed May 07 21:38:41 2014 Notified TAP-Windows driver to set a DHCP IP/netmask of 192.168.0.201/255.255.255.0 on interface {1F145805-92FC-454E-8FD9-0A6017DD4AD1} [DHCP-serv: 192.168.0.0, lease-time: 31536000]
Wed May 07 21:38:41 2014 Successful ARP Flush on interface [35] {1F145805-92FC-454E-8FD9-0A6017DD4AD1}
Wed May 07 21:38:46 2014 TEST ROUTES: 1/1 succeeded len=0 ret=1 a=0 u/d=up
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD <Remote Router IP> MASK 255.255.255.255 172.20.10.1
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=25 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 192.168.0.3
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=30 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 192.168.0.3
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=30 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 Initialization Sequence Completed

Я пытался использовать флаги на стороне клиента при открытии соединения:

openvpn --config "C:\Program Files\OpenVPN\config\client.ovpn" --redirect-gateway def1 --route-method exe

Но все же, когда я захожу на whatsmyip.org, там все равно говорится, что мои клиенты ip.

Кто-нибудь имел эту проблему и сумел ее решить?

Большое спасибо


Вы пытались push "route 0.0.0.0 0.0.0.0"или похожи на проталкивание маршрутов? Не забывайте маршрут обратно в VPN!
LUB

Да, это делается автоматически, когда используется push "redirect-gateway def1" ... Он добавляет маску 0.0.0.0 127.0.0.0 и маску 127.0.0.0 127.0.0.0 (обгоняя маршрут по умолчанию без удаления уже существующего)
Просто Удачно действительно

Я обеспокоен, если вы запускаете клиент как «Запуск от имени администратора» в Windows! Эта проблема может возникнуть, если вы запустите OVPN Windows Client без запуска администратора.
Kousha

Ответы:


35

Я проверил это с помощью сервера OpenVPN и настройки опции redirect-gateway def1 в конфигурации клиента и сервера работает нормально. Когда я захожу на whatismyip.org, я вижу IP-адрес моего сервера OpenVPN. Ниже приведен конфиг клиента, который я использую:

client
dev tun
proto udp
# THE IP OF THE REMOTE OPENVPN SERVER:
remote ip_address port
resolv-retry infinite
nobind
persist-key
persist-tun
# THE CSR FILE:
pkcs12 certificate.p12
ns-cert-type server
cipher AES-256-CBC
comp-lzo
redirect-gateway def1
verb 3

Я также протестировал добавление опции redirect-gateway def1 к команде openvpn и добился того же результата. Конфигурация сервера:

port 1194
proto udp
dev tun

dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ca /etc/openvpn/easy-rsa/keys/ca.crt
# ENSURE THE DOMAIN NAME/FILENAME IS CORRECT:
cert /etc/openvpn/easy-rsa/keys/cert.crt
key /etc/openvpn/easy-rsa/keys/cert.key

server 10.5.3.0  255.255.255.0
# YOUR LOCAL SERVER IP HERE:
client-config-dir ccd
route 10.5.3.0 255.255.255.0
ifconfig-pool-persist ipp.txt
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun

status log/openvpn-status.log 5
status-version 2
log-append log/openvpn.log
verb 3  # verbose mode
management localhost port /etc/openvpn/management-password

# ROUTE THE CLIENT'S INTERNET ACCESS THROUGH THIS SERVER:
push "redirect-gateway def1"
push "remote-gateway vpn_server_ip"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 60

Попробовал сегодня ... Еще не повезло. Я заметил, что вы используете адаптер TUN, а не адаптер TAP ... Вместо этого я попробую и сообщу: D
Just Lucky Really

1
Хорошо, использование адаптера TUN, похоже, работает ... Хотя меня беспокоят маршруты, которые мне нужно назначить ... Я использую 192.168.1.0/24 для сети VPN и 192.168.0.0/ 24 мой сервер локальной сети. Так что в моей конфигурации сервера, я добавил я route 192.168.1.0 255.255.255.0и push "route 192.168.0.0 255.255.255.0"но мой клиент не получает доступ к другим подсетям , кроме этого 192.168.1.0/24 сети ... Я копаться немного больше
Просто повезло действительно

20

Может быть, вы забыли изменить свой NAT? Запустите эти 3 команды от имени пользователя root

Команды:

iptables -I FORWARD -i tun0 -o eth0 \
         -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT

iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
         -j ACCEPT

iptables -t nat -I POSTROUTING -o eth0 \
          -s 10.8.0.0/24 -j MASQUERADE

Надпись:

  • tun0: ваша виртуальная VPN сетевая карта
  • eth0: ваша обычная сетевая карта
  • 10.8.0.0: ip блок вашей сети VPN

1
Этот шаг модификации NAT очень важен. Я просто не мог заставить это работать без выполнения выше 3 команд.
Нитеш Кумар Ананд

6
обратите внимание, что эти команды должны выполняться на сервере openvpn, а не на клиенте.
Кем Мейсон

1
Я обнаружил, что только изменение natтаблицы также работает на моем сервере.
Ginhing

1
Нужно ли сохранять правила iptables в случае перезагрузки сервера openVPN?
DWils

@DWils Да, вам нужно поместить их в какой-нибудь скрипт запуска. Проверьте это Q & A: askubuntu.com/questions/270693/…
Арне

1

После тщательного поиска ответа кажется, что я решил это, возможно, частично, но, по крайней мере, очень просто:

Я использую Xubuntu 14.04 и пакет OpenVPN из основного источника. В Настройках> Система> Сеть я заменил предварительно установленный DNS-адрес 127.0.1.1на Google 8.8.8.8, и теперь я вижу весь трафик, проходящий через VPN-сервер.

В таблице Wireshark отсутствует такая строка, как DNS: все данные идут как TCP через зашифрованный канал. Я вижу трафик DHCP и DNS, когда смотрю tun0(внутренний блокнот). Когда я исследую wlan0трафик (внешний между ноутбуком и маршрутизатором WiFi), я получаю только серые пакеты TCP.

Я думаю, что это происходит из-за того, что DNS-запрос не нужен для декодирования символов в числа, и он идет в общем потоке, как обычный пакет данных.

Я буду рад узнать ваши соображения, не удивительно, если я полностью ошибаюсь


Я забыл: у этого метода есть одно неоспоримое преимущество - он работает, даже если VPN-сервер не поддерживает DNS-маршрутизацию.
xrobot

Кстати, мы могли бы сделать один трюк: если мы будем время от времени отправлять ложно видимые невинные DNS-запросы, то косвенно это может быть подтверждением нашей лояльности Большому Брату.
xrobot

1

Добавьте следующую директиву в файл конфигурации сервера:

push "redirect-gateway def1"

Если ваша настройка VPN находится в беспроводной сети, где все клиенты и сервер находятся в одной беспроводной подсети, добавьте локальный флаг:

push "redirect-gateway local def1"

Если вы передадите клиенту параметр redirect-gateway, весь сетевой IP-трафик, исходящий от клиентских компьютеров, будет проходить через сервер OpenVPN. Сервер должен быть настроен так, чтобы каким-то образом обрабатывать этот трафик, например, путем NAT-соединения с Интернетом или маршрутизации через HTTP-прокси сайта сервера.

В Linux вы можете использовать такую ​​команду для NAT для трафика VPN-клиента в Интернет:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Эта команда предполагает, что VPN-подсеть имеет 10.8.0.0/24 (взято из директивы сервера в конфигурации сервера OpenVPN) и что локальный интерфейс Ethernet имеет значение eth0.

Когда используется redirect-gateway, клиенты OpenVPN будут направлять DNS-запросы через VPN, и VPN-сервер должен будет обрабатывать их. Это может быть достигнуто путем передачи адреса DNS-сервера подключающимся клиентам, который заменит их обычные настройки DNS-сервера во время активности VPN. Например:

push "dhcp-option DNS 10.8.0.1"

настроит клиентов Windows (или клиентов не Windows с некоторыми дополнительными сценариями на стороне клиента) для использования 10.8.0.1 в качестве своего DNS-сервера. Любой адрес, который доступен клиентам, может использоваться в качестве адреса DNS-сервера.


0

Если ваш OpenVPN-клиент работает в Windows 10 (или аналогичной версии), существует другая проблема, на которую следует обратить внимание: порядок привязки сетевых карт. Существующие настройки DNS-сервера в локальной сети или адаптере Wi-Fi могут иметь приоритет над настройками DNS-сервера для туннельного интерфейса, поэтому даже если все настроено с точки зрения OpenVPN, Windows продолжает использовать исходный DNS-сервер.

Вы можете исправить это, как описано в этом сообщении на форуме Microsoft.

https://social.technet.microsoft.com/Forums/windowsserver/en-US/1cc5b647-6e51-482b-8998-ac5c3900938c/how-to-force-vpn-clients-to-use-the-dnsserver-from- их-VPN-адаптер не-заместитель dnsserver-из-их? форума = winserverNIS


не ответ на вопрос
pim

0

Я столкнулся с той же проблемой и обнаружил, что при использовании сценария установки PiVPN для Open VPN в конфигурации сервера есть строка:

нажмите "redirect-gateway def1 bypass-dhcp"

уже. На клиенте IOS все маршрутизируется через туннель автоматически (это то, что говорит журнал).

На клиенте Tunnelblick вам нужно добавить эту строку в client.ovpn строку:

redirect-gateway def1 bypass-dhcp

и это должно работать отлично. По крайней мере, на моем Mac.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.