Вопрос или проблема
Я настроил сервер OpenVPN (2.2.1) на виртуальной машине Ubuntu в облаке Amazon Elastic Compute. Сервер работает. Я установил OpenVPN (2.2.1) на клиенте Mac OS X (10.8.2) и использую бинарный файл openvpn2 для подключения (в отличие от других клиентов, таких как Tunnelblick или Viscosity). Я могу подключиться к серверу и успешно пинговать его или заходить по ssh через туннель.
Однако я не могу перенаправить весь интернет-трафик через VPN, даже если использую параметр push “redirect-gateway def1 bypass-dhcp” в конфигурациях server.conf. Когда я подключаюсь к серверу с этими конфигурациями, я получаю успешное соединение, но затем бесконечную серию сообщений об ошибках: “write UDPv4: No route to host (code=65)”. Похоже, что маршрутизация трафика нарушена, потому что я больше не могу ничего получить, даже сам сервер OpenVPN (например, пингуя 10.8.0.1).
Это выше моего понимания. Я нахожу мало помощи в интернете и не знаю, что пробовать дальше. Я не думаю, что это проблема пересылки трафика на сервере, поскольку, во-первых, я также позаботился об этом, и, во-вторых, я не могу даже пинговать сервер VPN локально через туннель (или пинговать что-либо еще в этом плане).
Спасибо за вашу помощь.
Вот файл server.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert ec2-server.crt
key ec2-server.key # Этот файл должен храниться в секрете
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
И файл client.conf:
client
dev tun
proto udp
remote servername.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert Toto5.crt
key Toto5.key
ns-cert-type server
comp-lzo
verb 3
Вот лог соединения с сообщениями об ошибках:
$ sudo openvpn2 --config client.conf
Ср Мар 13 22:58:22 2013 OpenVPN 2.2.1 x86_64-apple-darwin12.2.0 [SSL] [LZO2] [eurephia] собран 4 Марта 2013
Ср Мар 13 22:58:22 2013 ЗАМЕТКА: OpenVPN 2.1 требует '--script-security 2' или выше для вызова пользовательских скриптов или исполняемых файлов
Ср Мар 13 22:58:22 2013 Инициализация сжатия LZO
Ср Мар 13 22:58:22 2013 Параметры MTU канала управления [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Ср Мар 13 22:58:22 2013 Буферы сокетов: R=[196724->65536] S=[9216->65536]
Ср Мар 13 22:58:22 2013 Параметры MTU канала передачи данных [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Ср Мар 13 22:58:22 2013 Хеш локальных параметров (VER=V4): '41690919'
Ср Мар 13 22:58:22 2013 Ожидаемый хеш удаленных параметров (VER=V4): '530fdded'
Ср Мар 13 22:58:22 2013 Локальная ссылка UDPv4: [undef]
Ср Мар 13 22:58:22 2013 Удаленная ссылка UDPv4: 54.234.43.171:1194
Ср Мар 13 22:58:22 2013 TLS: Начальный пакет от 54.234.43.171:1194, sid=ffbaf343 d0c1a266
Ср Мар 13 22:58:22 2013 VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funst ... ost.domain
Ср Мар 13 22:58:22 2013 VERIFY OK: nsCertType=SERVER
Ср Мар 13 22:58:22 2013 VERIFY OK: depth=0, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funst ... ost.domain
Ср Мар 13 22:58:23 2013 Шифрование канала передачи данных: шифр 'BF-CBC' инициализирован с 128 битным ключом
Ср Мар 13 22:58:23 2013 Шифрование канала передачи данных: используется 160 битный хэш сообщения 'SHA1' для HMAC аутентификации
Ср Мар 13 22:58:23 2013 Дешифрование канала передачи данных: шифр 'BF-CBC' инициализирован с 128 битным ключом
Ср Мар 13 22:58:23 2013 Дешифрование канала передачи данных: используется 160 битный хэш сообщения 'SHA1' для HMAC аутентификации
Ср Мар 13 22:58:23 2013 Канал управления: TLSv1, шифр TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 битный RSA
Ср Мар 13 22:58:23 2013 [ec2-server] Установлено соединение с 54.234.43.171:1194
Ср Мар 13 22:58:25 2013 ОТПРАВЛЕНО УПРАВЛЕНИЕ [ec2-server]: 'PUSH_REQUEST' (status=1)
Ср Мар 13 22:58:25 2013 PUSH: Получено управляющее сообщение: 'PUSH_REPLY,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5'
Ср Мар 13 22:58:25 2013 ИМПОРТ ПАРАМЕТРОВ: таймеры и/или таймауты изменены
Ср Мар 13 22:58:25 2013 ИМПОРТ ПАРАМЕТРОВ: --ifconfig/up параметры изменены
Ср Мар 13 22:58:25 2013 ИМПОРТ ПАРАМЕТРОВ: параметры маршрута изменены
Ср Мар 13 22:58:25 2013 МАРШРУТ default_gateway=0.0.0.0
Ср Мар 13 22:58:25 2013 Устройство TUN/TAP /dev/tun0 открыто
Ср Мар 13 22:58:25 2013 /sbin/ifconfig tun0 delete
ifconfig: ioctl (SIOCDIFADDR): Невозможно назначить запрашиваемый адрес
Ср Мар 13 22:58:25 2013 ЗАМЕТКА: Попытка удалить существующий экземпляр tun/tap -- Нет проблем, если неудача
Ср Мар 13 22:58:25 2013 /sbin/ifconfig tun0 10.8.0.6 10.8.0.5 mtu 1500 netmask 255.255.255.255 up
Ср Мар 13 22:58:25 2013 /sbin/route add -net 10.8.0.0 10.8.0.5 255.255.255.0
добавить сеть 10.8.0.0: шлюз 10.8.0.5
Ср Мар 13 22:58:25 2013 Инициализация последовательности завершена
^CСр Мар 13 22:58:30 2013 event_wait : Прерывание системного вызова (code=4)
Ср Мар 13 22:58:30 2013 TCP/UDP: Закрытие сокета
Ср Мар 13 22:58:30 2013 /sbin/route delete -net 10.8.0.0 10.8.0.5 255.255.255.0
удалить сеть 10.8.0.0: шлюз 10.8.0.5
Ср Мар 13 22:58:30 2013 Закрытие интерфейса TUN/TAP
Ср Мар 13 22:58:30 2013 SIGINT[hard,] получено, процесс завершен
toto5:ttntec2 Dominic$ sudo openvpn2 --config client.conf --remote ec2-54-234-43-171.compute-1.amazonaws.com
Ср Мар 13 22:58:57 2013 OpenVPN 2.2.1 x86_64-apple-darwin12.2.0 [SSL] [LZO2] [eurephia] собран 4 Марта 2013
Ср Мар 13 22:58:57 2013 ЗАМЕТКА: OpenVPN 2.1 требует '--script-security 2' или выше для вызова пользовательских скриптов или исполняемых файлов
Ср Мар 13 22:58:57 2013 Инициализация сжатия LZO
Ср Мар 13 22:58:57 2013 Параметры MTU канала управления [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Ср Мар 13 22:58:57 2013 Буферы сокетов: R=[196724->65536] S=[9216->65536]
Ср Мар 13 22:58:57 2013 Параметры MTU канала передачи данных [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
Ср Мар 13 22:58:57 2013 Хеш локальных параметров (VER=V4): '41690919'
Ср Мар 13 22:58:57 2013 Ожидаемый хеш удаленных параметров (VER=V4): '530fdded'
Ср Мар 13 22:58:57 2013 Локальная ссылка UDPv4: [undef]
Ср Мар 13 22:58:57 2013 Удаленная ссылка UDPv4: 54.234.43.171:1194
Ср Мар 13 22:58:57 2013 TLS: Начальный пакет от 54.234.43.171:1194, sid=a0d75468 ec26de14
Ср Мар 13 22:58:58 2013 VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funst ... ost.domain
Ср Мар 13 22:58:58 2013 VERIFY OK: nsCertType=SERVER
Ср Мар 13 22:58:58 2013 VERIFY OK: depth=0, /C=US/ST=CA/L=SanFrancisco/O=Fort-Funst ... ost.domain
Ср Мар 13 22:58:58 2013 Шифрование канала передачи данных: шифр 'BF-CBC' инициализирован с 128 битным ключом
Ср Мар 13 22:58:58 2013 Шифрование канала передачи данных: используется 160 битный хэш сообщения 'SHA1' для HMAC аутентификации
Ср Мар 13 22:58:58 2013 Дешифрование канала передачи данных: шифр 'BF-CBC' инициализирован с 128 битным ключом
Ср Мар 13 22:58:58 2013 Дешифрование канала передачи данных: используется 160 битный хэш сообщения 'SHA1' для HMAC аутентификации
Ср Мар 13 22:58:58 2013 Канал управления: TLSv1, шифр TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 битный RSA
Ср Мар 13 22:58:58 2013 [ec2-server] Установлено соединение с 54.234.43.171:1194
Ср Мар 13 22:59:00 2013 ОТПРАВЛЕНО УПРАВЛЕНИЕ [ec2-server]: 'PUSH_REQUEST' (status=1)
Ср Мар 13 22:59:00 2013 PUSH: Получено управляющее сообщение: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5'
Ср Мар 13 22:59:00 2013 ИМПОРТ ПАРАМЕТРОВ: таймеры и/или таймауты изменены
Ср Мар 13 22:59:00 2013 ИМПОРТ ПАРАМЕТРОВ: --ifconfig/up параметры изменены
Ср Мар 13 22:59:00 2013 ИМПОРТ ПАРАМЕТРОВ: параметры маршрута изменены
Ср Мар 13 22:59:00 2013 МАРШРУТ default_gateway=0.0.0.0
Ср Мар 13 22:59:00 2013 Устройство TUN/TAP /dev/tun0 открыто
Ср Мар 13 22:59:00 2013 /sbin/ifconfig tun0 delete
ifconfig: ioctl (SIOCDIFADDR): Невозможно назначить запрашиваемый адрес
Ср Мар 13 22:59:00 2013 ЗАМЕТКА: Попытка удалить существующий экземпляр tun/tap -- Нет проблем, если неудача
Ср Мар 13 22:59:00 2013 /sbin/ifconfig tun0 10.8.0.6 10.8.0.5 mtu 1500 netmask 255.255.255.255 up
Ср Мар 13 22:59:00 2013 /sbin/route add -net 54.234.43.171 0.0.0.0 255.255.255.255
добавить сеть 54.234.43.171: шлюз 0.0.0.0
Ср Мар 13 22:59:00 2013 /sbin/route add -net 0.0.0.0 10.8.0.5 128.0.0.0
добавить сеть 0.0.0.0: шлюз 10.8.0.5
Ср Мар 13 22:59:00 2013 /sbin/route add -net 128.0.0.0 10.8.0.5 128.0.0.0
добавить сеть 128.0.0.0: шлюз 10.8.0.5
Ср Мар 13 22:59:00 2013 /sbin/route add -net 10.8.0.0 10.8.0.5 255.255.255.0
добавить сеть 10.8.0.0: шлюз 10.8.0.5
Ср Мар 13 22:59:00 2013 Инициализация последовательности завершена
Ср Мар 13 22:59:00 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:00 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:01 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:01 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:01 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:02 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:02 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:02 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:02 2013 write UDPv4: No route to host (code=65)
Ср Мар 13 22:59:02 2013 write UDPv4: No route to host (code=65)
...
Таблица маршрутизации после подключения БЕЗ параметра push redirect-gateway (весь трафик не перенаправляется на VPN, и все работает нормально, я могу пинговать или заходить по ssh на сервер OpenVPN и получать доступ ко всем другим ресурсам Интернета через мой шлюз по умолчанию):
Destination Gateway Flags Refs Use Netif Expire
default user148-1.wireless UGSc 50 0 en1
10.8/24 10.8.0.5 UGSc 2 7 tun0
10.8.0.5 10.8.0.6 UH 3 2 tun0
127 localhost UCS 0 0 lo0
localhost localhost UH 6 6692 lo0
client.openvpn.net client.openvpn.net UH 3 18 lo0
142.1.148/22 link#5 UCS 2 0 en1
user148-1.wireless 0:90:b:27:10:71 UHLWIir 50 0 en1 76
user150-173.wirele localhost UHS 0 0 lo0
142.1.151.255 ff:ff:ff:ff:ff:ff UHLWbI 0 2 en1
169.254 link#5 UCS 1 0 en1
169.254.255.255 0:90:b:27:10:71 UHLSWi 0 0 en1 71
Таблица маршрутизации после подключения с включенной опцией push redirect-gateway, как в файле server.conf выше (весь интернет-трафик должен перенаправляться в туннель VPN, но ничего не работает, я не могу получить доступ к интернет-ресурсам вообще):
Destination Gateway Flags Refs Use Netif Expire
0/1 10.8.0.5 UGSc 1 0 tun0
default user148-1.wireless UGSc 7 0 en1
10.8/24 10.8.0.5 UGSc 0 0 tun0
10.8.0.5 10.8.0.6 UHr 6 0 tun0
54.234.43.171/32 0.0.0.0 UGSc 1 0 en1
127 localhost UCS 0 0 lo0
localhost localhost UH 3 6698 lo0
client.openvpn.net client.openvpn.net UH 0 27 lo0
128.0/1 10.8.0.5 UGSc 2 0 tun0
142.1.148/22 link#5 UCS 1 0 en1
user148-1.wireless 0:90:b:27:10:71 UHLWIir 1 0 en1 833
user150-173.wirele localhost UHS 0 0 lo0
169.254 link#5 UCS 1 0 en1
169.254.255.255 0:90:b:27:10:71 UHLSW 0 0 en1
Я думаю, что нашел проблему. Объяснения и возможные решения будут опубликованы здесь: https://forums.openvpn.net/post28560.html#p28560.
Ответ или решение
Перенаправление всего трафика через OpenVPN на клиенте Mac OS X
Установка и настройка OpenVPN может быть непростой задачей, особенно когда дело касается перенаправления всего интернет-трафика через VPN-туннель. В данном случае, мы имеем установленные OpenVPN сервер (на Ubuntu) и клиент (на Mac OS X), и столкнулись с проблемой, связанной с ошибками маршрутизации и невозможностью доступа к ресурсам.
Описание проблемы
На вашем Mac OS X клиенте установлен OpenVPN, и вы успешно подключаетесь к серверу. Однако после этого не удаётся перенаправить весь интернет-трафик через VPN. Использование директивы push "redirect-gateway def1 bypass-dhcp"
в конфигурации сервера не решает проблему – происходит ошибка: write UDPv4: No route to host (code=65)
. Вы не можете получить доступ даже к самому серверу, находясь за туннелем.
Анализ конфигурации
-
Конфигурационный файл сервера (
server.conf
):port 1194 proto udp dev tun ca ca.crt cert ec2-server.crt key ec2-server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" client-to-client keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log verb 3
-
Конфигурационный файл клиента (
client.conf
):client dev tun proto udp remote servername.com 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert Toto5.crt key Toto5.key ns-cert-type server comp-lzo verb 3
-
Логи подключения показывают, что сервер успешно предоставляет конфигурацию, и туннель корректно инициализируется. Однако в маршрутах по умолчанию отмечается, что шлюз по умолчанию равен
0.0.0.0
, что является основной причиной ваших проблем с маршрутизацией.
Решение проблемы
Вот шаги, которые помогут вам обойти текущие неудобства и добиться успешного перенаправления всего трафика через OpenVPN:
-
Проверка конфигурации маршрутизации:
Убедитесь, что OpenVPN серверу разрешен пересылка пакетов. Для этого выполните команду:echo 1 > /proc/sys/net/ipv4/ip_forward
И добавьте следующую строку в
/etc/sysctl.conf
для постоянного изменения:net.ipv4.ip_forward = 1
-
Проверьте настройки iptables:
Убедитесь, что у вас есть необходимые правила iptables, чтобы разрешить NAT (включение IP-переадресации):iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Замените
eth0
на ваш интерфейс, который используется для выхода в интернет. -
Корректировка маршрутов на клиенте:
Убедитесь, что клиентский маршрут настроен правильно. В конфигурации клиента добавьте:route 0.0.0.0 0.0.0.0 10.8.0.5
-
Тестирование соединения:
После внесенных изменений, перезапустите сервер и клиент OpenVPN. После успешного подключения проверьте маршруты на клиенте с помощью командыnetstat -rn
. Убедитесь, что маршруты к сети 0.0.0.0 направляются через туннель. -
Тестирование доступа:
После настройки, попробуйте получить доступ к Интернет-ресурсам, чтобы убедиться, что трафик действительно маршрутизируется через VPN. Вы можете использовать командуcurl ifconfig.co
для проверки вашего внешнего IP-адреса.
Заключение
Перенаправление всего интернет-трафика через VPN может быть сложной задачей, но с правильной конфигурацией это возможно. Убедившись в том, что маршруты правильно настроены как на сервере, так и на клиенте, вы сможете успешно использовать OpenVPN для безопасного доступа к интернет-ресурсам. Если ошибки сохраняются, проверьте логи и старайтесь искать решения на специализированных форумах, таких как OpenVPN Community, либо обратитесь к профессиональным администраторам для более глубокого анализа.