Вопрос или проблема
Я настроил сервер OpenVPN на VPS в США и сконфигурировал его для маршрутизации всего трафика клиентов. Все работает нормально в отношении VPN-соединения в целом. Все сайты для проверки IP-адреса показывают мне IP-адрес американского сервера, и даже hulu.com работает (он не будет работать, если вы не находитесь в США). Но по какой-то причине netflix.com говорит: “Извините, Netflix пока недоступен в вашей стране.” Я подумал, что Netflix, вероятно, использует более сложные методы определения вашего местоположения, помимо просто вашего IP-адреса. Но я не смог найти способ заставить это работать, пока не отказался от идеи использования VPN и вместо этого не подключился к серверу через простой сокс-туннель с помощью ssh, выполнив:
ssh -D 9999 user@serverip
Все, что мне нужно было сделать, это изменить ключ
network.proxy.socks_remote_dns
в Firefox с false на true, чтобы предотвратить утечки DNS, и настроить сокс-прокси. После этого я наконец смог смотреть netflix.com. В результате я пришел к выводу, что в браузере (или что-то вроде системного часового пояса) нет ничего, что сообщало бы Netflix о местоположении, поэтому это должно быть связано с конфигурацией OpenVPN.
После этого я использовал tcpdump, чтобы зафиксировать весь трафик на сетевом интерфейсе сервера venet0 (OpenVZ VPS), посетил netflix.com на клиенте, сначала подключившись к VPN, а затем подключившись через сокс-туннель, а затем сравнил оба вывода.
Единственное, что привлекло моё внимание, это то, что при использовании сокс-туннеля сервер в основном использовал ipv6 для подключения к Netflix, тогда как он использовал только ipv4, когда клиент был подключен к серверу OpenVPN. Но я не понимаю, как это может иметь такое значение.
Итак, что я упускаю? Есть ли способ настроить OpenVPN так, чтобы он также использовал ipv6 для подключения к веб-сайту, хотя между VPS и клиентом есть только ipv4-соединение?
Вот server.conf сервера OpenVPN (OpenVZ VPS)
local serverip
port 443
proto tcp
dev tun
ca ./easy-rsa2/keys/ca.crt
cert ./easy-rsa2/keys/vps1.crt
key ./easy-rsa2/keys/vps1.key # Этот файл должен оставаться в секрете
dh ./easy-rsa2/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client
keepalive 10 120
tls-auth ta.key 0 # Этот файл секретен
cipher AES-256-CBC
comp-lzo
max-clients 4
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
iptables перенаправление
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source serverip
(включено переадресация ipv4)
Я пробовал все это на клиенте Win7 и Debian с только ipv4-соединениями и всегда проверял, что они используют правильный DNS-сервер (тестировалось с ipleak.net и tcpdump / wireshark).
client.conf:
client
dev tun
proto tcp
remote serverip 443
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
Я не знаю, решит ли это ваши проблемы с Netflix (хотя я предполагаю, что возможно, Netflix не геолокализует вас одинаково по IPv4 и IPv6), но поскольку в OpenVPN 2.3 добавлена полная поддержка IPv6.
Просто используйте server-ipv6 addr/bits
с битами от 64 до 112.
Ответ или решение
Проблема с доступом к Netflix через OpenVPN действительно может быть связана с тем, как Netflix определяет геолокацию пользователей. У вашего VPN-сервера, вероятно, отсутствует поддержка IPv6 или неправильно настроена маршрутизация трафика.
Netflix использует различные методы для определения местоположения, включая анализ IP-адресов, сведения о провайдере и заголовки HTTP. Если ваш OpenVPN сервер отправляет запросы только по IPv4, тогда IP-адрес, которым он использует для связи с Netflix, может не совпадать с тем, который используется для вашего клиента при подключении через OpenVPN. Вот несколько шагов, которые вы можете предпринять для решения этой проблемы.
1. Настройка поддержки IPv6 в OpenVPN
Чтобы включить поддержку IPv6 в вашем OpenVPN-сервере, вам необходимо добавить конфигурацию для IPv6. В вашем server.conf
добавьте следующие строки:
# Настройка IPv6 сети
server-ipv6 2001:db8:1:1::/64
Также убедитесь, что у вас включен IPv6 на сервере, и клиентские настройки корректно регулируют маршрут IPv6 трафика.
2. Настройка маршрутизатора
В конфигурации iptables
вам нужно будет добавить правила для IPv6, чтобы маршрутизировать трафик, и, возможно, использовать ip6tables
для этого. Например:
ip6tables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -i tun0 -j ACCEPT
3. Настройка клиента
Убедитесь, что ваш клиент поддерживает IPv6. Добавьте следующие строки в ваш client.conf
, чтобы разрешить подключение по IPv6:
# Использовать IPv6
route-ipv6 ::/0
4. Проверка DNS
Удостоверьтесь, что DNS-серверы, которые вы используете для OpenVPN (например, 8.8.8.8 и 8.8.4.4), корректно обрабатывают запросы IPv6. Настройка, которую вы указали в push
— это правильный способ, но убедитесь, что проверяете и на DNS-утечки через дополнительные инструменты (например, DNS leak test).
5. Тестирование
Запустите VPN и выполните проверку на сайте, например, ipleak.net, чтобы убедиться, что ваш IP-адрес действительно отображается как местоположение США, и что также ваш IPv6-адрес правильно определен.
6. Использование прокси-серверов
Если вышеуказанные шаги не решают вашу проблему, в то время как использование SOCKS работает, вы можете создать решение, используя прокси-серверы для HTTPS-трафика или специальные сервисы для обхода геоблокировок. Это можно сделать путем создания HTTP/HTTPS-прокси, который будет пользоваться вашим VPN-соединением.
Заключение
После внесения вышеописанных изменений, не забудьте перезапустить OpenVPN как на сервере, так и на клиентох. Эти шаги могут помочь в решении проблемы с доступом к Netflix через OpenVPN. Если проблема продолжает сохраняться, это может быть следствием дополнительных мер со стороны Netflix по блокировке VPN. В таком случае стоит рассмотреть использование других решений, например, платформ, предлагающих специальную функциональность для обхода таких блокировок.