如何让OpenVPN网络中Windows客户端通过Android手机代理用其公网IP
问题场景与需求
现有环境
- OpenVPN服务器:Ubuntu 20.04 VPS,版本2.4.7,状态active,分配子网
10.8.0.0/24 - OpenVPN客户端:
- Windows VDS:分配IP
10.8.0.3 - Android 8手机:分配IP
10.8.0.2,已安装Proxy Server,创建HTTP/HTTPS代理(监听0.0.0.0:31313),仅使用移动网络
- Windows VDS:分配IP
服务器配置(serv.conf)
local SEVERIP port SERVERPORT proto udp dev tun ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-crypt tc.key topology subnet server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" ifconfig-pool-persist ipp.txt push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" push "block-outside-dns" keepalive 10 120 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun verb 3 crl-verify crl.pem explicit-exit-notify
通用客户端配置
client dev tun proto udp remote SEVERIP SERVERPORT resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 cipher AES-256-CBC ignore-unknown-option block-outside-dns verb 3
当前问题
Windows VDS将10.8.0.2:31313设为HTTP代理,访问https://api64.ipify.org时返回Ubuntu服务器的公网IP,但手机代理日志已记录到请求。需要实现Windows通过该代理访问外网时,使用Android手机的公网IP。
解决方案
1. 修改Android客户端的OpenVPN配置,取消全局路由
当前服务器推送的redirect-gateway def1 bypass-dhcp会让手机所有流量默认走OpenVPN服务器出口,导致代理转发的请求也从服务器IP发出。需修改Android客户端配置文件,添加以下内容:
pull-filter ignore "redirect-gateway" route-nopull route 10.8.0.0 255.255.255.0
pull-filter ignore "redirect-gateway":忽略服务器推送的全局路由指令route-nopull:拒绝接收服务器推送的所有路由规则route 10.8.0.0 255.255.255.0:手动添加OpenVPN子网路由,保证Windows VDS能正常访问手机的代理服务
2. 确认Android代理的访问权限
检查手机Proxy Server的设置,确保没有IP白名单限制(监听0.0.0.0默认允许所有IP访问),同时确认手机的移动网络未被VPN接管——此时代理收到Windows的请求后,会通过手机自身移动网络向外发送,返回的就是手机的公网IP。
3. 验证效果
重启Android的OpenVPN客户端和Proxy Server,在Windows VDS上再次访问https://api64.ipify.org,此时应返回Android手机的公网IP,同时手机代理日志可确认请求通过移动网络转发。
内容的提问来源于stack exchange,提问作者Quaw
相关产品推荐
相关产品推荐

