基于GCP配置双VPS的OpenVPN流量转发以降低延迟的技术咨询
基于GCP配置双VPS的OpenVPN流量转发以降低延迟的技术咨询
嘿,你的这个思路非常靠谱!利用GCP内网极低的延迟来中转流量,确实能解决远端VPN延迟高的问题。下面我一步步给你讲怎么配置,还有你关心的公网IP问题:
整体逻辑梳理
你的方案本质是:本地设备→近端Server B(OpenVPN服务器)→Server B通过GCP内网连接远端Server A(OpenVPN服务器)→最终通过Server A访问互联网。全程只有本地到Server B是公网,Server B到Server A走GCP内网,完美降低核心链路的延迟。
具体配置步骤
1. 准备工作(GCP层面)
- 确保Server A和Server B处于同一个GCP VPC网络(如果不在同一VPC,配置VPC peering也可以,但同VPC更简单),二者内网IP能互相ping通。
- 在GCP实例设置里,给Server A和Server B都开启IP转发(实例详情→编辑→启用IP转发),这是流量转发的前提。
- 配置GCP防火墙规则:
- 允许本地IP段访问Server B的UDP 1194端口(OpenVPN默认端口)
- 允许Server B的内网IP访问Server A的UDP 1194端口
- 允许两个实例之间的所有内网流量(确保转发不受阻)
2. 配置远端Server A
- 确保你的原有OpenVPN服务正常运行,修改Server A的OpenVPN配置文件(通常是
/etc/openvpn/server.conf),允许来自Server B内网IP的连接。可以添加一行:push "route 你的Server B内网IP/32 255.255.255.255",或者直接在防火墙里放行Server B的内网IP。 - 开启Server A的内核IP转发:
sysctl -w net.ipv4.ip_forward=1 echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf - 重启OpenVPN服务:
systemctl restart openvpn@server
3. 配置近端Server B
Server B需要同时扮演两个角色:连接Server A的OpenVPN客户端,以及给本地设备提供服务的OpenVPN服务器。
第一步:安装并配置OpenVPN客户端(连Server A)
- 复制Server A上的OpenVPN客户端配置文件(比如
client.ovpn)到Server B,修改其中的remote字段为Server A的内网IP(而不是公网IP),这样流量走GCP内网。 - 启动OpenVPN客户端并设置开机自启:
确认连接成功:openvpn --config /path/to/client.ovpn --daemon systemctl enable openvpn@clientip addr show tun0(应该能看到Server A分配的内网VPN IP)
第二步:配置OpenVPN服务器(供本地设备连接)
- 在Server B上安装OpenVPN服务器,生成服务器证书和客户端配置(和常规OpenVPN服务器配置流程一致)。
- 修改Server B的
server.conf,添加路由规则,把所有流量转发到连接Server A的tun0接口:push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" # 可选,指定DNS服务器 - 开启Server B的内核IP转发(和Server A一样的命令)
- 配置iptables做NAT转发,确保流量能从本地连接的接口(比如
tun1,Server B的OpenVPN服务器接口)转发到tun0:iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE # 保存规则,重启后生效 iptables-save > /etc/iptables/rules.v4 - 重启Server B的OpenVPN服务器:
systemctl restart openvpn@server
公网IP说明
当你通过这个方案上网时,你的公网IP会显示为Server A的公网IP。因为所有最终流向互联网的流量,都是通过Server A的公网接口出去的,Server B只是做了内网中转,不会改变你的出口IP。
额外优化建议
- 给Server A和Server B配置静态内网IP,避免实例重启后IP变化导致OpenVPN连接中断。
- 如果Server A和Server B在GCP的不同区域,VPC peering依然能保证低延迟,但同区域的内网延迟会更低,优先选择同区域的实例。
备注:内容来源于stack exchange,提问作者Joshua Reisbord
相关产品推荐
相关产品推荐

