Вопрос или проблема
Давний наблюдатель, впервые пишу. Я прочитал почти все сообщения по open-vpn на этом сайте, но не могу решить эту проблему.
Я могу подключиться к серверу openvpn без проблем и могу пинговать внутренние адреса и 8.8.8.8, но не могу получить доступ к интернету. Я изменил конфигурационные файлы как для сервера, так и для клиента, iptables, и убедился, что моя сеть настроена правильно. Сервер был настроен с установкой road warrior. Кто-нибудь знает, почему это не работает? Заранее благодарю за помощь.
Server.conf
port 51820
proto udp
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 192.168.1.1"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-128-CBC
comp-lzo
client.ovpn
client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote [my_public_ip] 51820
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-128-CBC
comp-lzo
setenv opt block-outside-dns
key-direction 1
verb 3
<ca>
-----BEGIN CERTIFICATE-----
IP Tables
sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eno1 -p udp -m state --state NEW -m udp --dport 51820 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o eno1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eno1 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
Интерфейсы:
source /etc/network/interfaces.d/*
# Циклический сетевой интерфейс
auto lo
iface lo inet loopback
# Основной сетевой интерфейс
auto eno1
iface eno1 inet static
address 192.168.1.213
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1 8.8.8.8
sysctl.conf
net.ipv4.ip_forward=1
Похоже, ваша конфигурация нормально подходит для TCP-соединений, но не для UDP, а, к сожалению, DNS использует UDP. Этот ответ может прояснить вашу проблему.
Обычно я использую nat
таблицу для организации NAT, вместо использования FORWARD
в input
таблице. Возможно, вам стоит попробовать настроить ваш iptables
в соответствии с инструкцией, как это.
Ответ или решение
Когда вы сталкиваетесь с проблемой, когда клиент OpenVPN может пинговать IP-адреса, но не может разрешить имена доменов, это может быть связано с несколькими факторами в вашей конфигурации. Рассмотрим шаги по диагностике и решению этой проблемы.
Анализ проблемы
Заключение:
Из вашего описания видно, что вы успешно подключаетесь к серверу OpenVPN и можете пинговать как внутренние, так и внешние IP-адреса (например, 8.8.8.8), но не можете получить доступ к интернету. Это указывает на потенциальные проблемы с настройками DNS и маршрутизации.
Важные аспекты конфигурации
-
Конфигурация сервера (server.conf):
- Вы используете директивы
push "redirect-gateway def1 bypass-dhcp"
иpush "dhcp-option DNS"
, что указывает на то, что сервер должен перенаправлять весь трафик через VPN и предоставлять DNS-серверы клиенту. Однако важно убедиться, что указанный DNS (в данном случае 192.168.1.1 и 8.8.8.8) доступен и правильно настроен.
- Вы используете директивы
-
Конфигурация клиента (client.ovpn):
- Включение параметра
block-outside-dns
полезно для предотвращения утечек DNS, однако этот параметр поддерживается только на Windows и может не действовать на других системах. Убедитесь, что нет конфликтующих настроек в вашем DNS.
- Включение параметра
-
Рулевой фильтр (iptables):
- Ваша конфигурация iptables выглядит хорошо для перенаправления VPN-трафика. Однако важно убедиться, что у вас есть правила NAT. Вы можете добавить следующее правило для разрешения NAT:
sudo iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
- Это правило позволит пакетам, выходящим на внешний интерфейс (eno1), менять свои IP-адреса на адрес интерфейса eno1. Это особенно важно для корректной работы NAT.
- Ваша конфигурация iptables выглядит хорошо для перенаправления VPN-трафика. Однако важно убедиться, что у вас есть правила NAT. Вы можете добавить следующее правило для разрешения NAT:
-
DNS-настройки:
- Убедитесь, что ваш системный DNS настроен правильно. Попробуйте вручную установить DNS-серверы в настройках сети вашего клиента (например, 8.8.8.8 и 1.1.1.1) и протестируйте разрешение имен с помощью
nslookup
илиdig
.
- Убедитесь, что ваш системный DNS настроен правильно. Попробуйте вручную установить DNS-серверы в настройках сети вашего клиента (например, 8.8.8.8 и 1.1.1.1) и протестируйте разрешение имен с помощью
-
Проверка маршрутизации:
- Используйте команду
route -n
на клиенте, чтобы проверить маршруты. Убедитесь, что маршруты к вашим DNS-серверам корректны и включены в таблицу маршрутизации.
- Используйте команду
Проверка после всех изменений
После внесенных изменений выполните следующие команды для проверки:
- Попробуйте выполнить
ping google.com
и посмотрите, произойдет ли разрешение имени. - Проверьте рабочие DNS-серверы с помощью
nslookup google.com
.
Заключение
Вам потребуется провести проверки по каждому из перечисленных аспектов, чтобы установить источник проблемы. Каждое изменение конфигурационной части следует тестировать и проверять итоги. Понимание маршрутизации и NAT в iptables, а также правильная настройка DNS — ключ к успешному подключению и работе через OpenVPN. Если ни один из шагов не сработал, обратите внимание на логи OpenVPN, они могут содержать полезную информацию о том, что пошло не так во время попыток подключения или передачи трафика.