我已经在美国 VPS 上设置了一个 OpenVPN 服务器,并将其配置为通过它路由所有客户端流量。总体而言,VPN 连接似乎一切正常。所有 IP 查询网站都向我显示美国服务器的 IP 地址,甚至 hulu.com 也可以使用(如果您不在美国,它将无法使用)。但出于某种原因,netflix.com 说“抱歉,Netflix 在您的国家/地区尚不可用。”。所以我认为 netflix 可能使用一些更复杂的方法来确定您的位置,而不仅仅是您的 IP 地址。但我找不到让它工作的方法,直到我放弃使用 VPN 的想法,而是通过运行以下命令通过简单的 ssh socks 隧道连接到服务器:
ssh -D 9999 user@serverip
我所要做的就是改变密钥
network.proxy.socks_remote_dns
在 Firefox 中将 DNS 设置为 true 以防止 DNS 泄漏并设置 socks 代理。然后我终于可以观看 netflix.com 了。结果我得出结论,浏览器中没有任何东西(或系统时区之类的东西)可以告诉 netflix 位置,所以它必须与 OpenVPN 配置有关。
之后我使用 tcpdump 记录服务器网络接口 venet0(OpenVZ VPS)上的所有流量,在客户端上访问 netflix.com,首先连接到 VPN,然后通过 socks 隧道连接,然后比较两个输出。
唯一引起我注意的是,使用 socks 隧道时,服务器主要使用 ipv6 连接到 Netflix,而客户端连接到 OpenVPN 服务器时,它只使用 ipv4。但我不明白这怎么会有这么大的差别。
那么我错过了什么?有没有办法配置 OpenVPN 以使用 ipv6 连接到网站,尽管 VPS 和客户端之间只有 ipv4 连接?
这是 OpenVPN 服务器(OpenVZ VPS)的 server.conf
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 # This file should be kept secret
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 # This file is secret
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 转发)
我总是在仅具有 ipv4 连接的 Win7 和 Debian 客户端上尝试了所有方法,并始终确保它们使用正确的 DNS 服务器(使用 ipleak.net 和 tcpdump / wireshark 测试)。
客户端.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
comb-lzo
verb 3
答案1
我不知道它是否能解决您的 Netflix 问题(尽管我认为 Netflix 可能不会通过 IPv4 和 IPv6 对您进行相同的地理定位),但自 OpenVPN 2.3 以来,它完全支持 IPv6。
只需使用server-ipv6 addr/bits
64 至 112 之间的位即可。