最近折腾出了一个极其硬核且神奇的做法:利用 WireGuard 这个纯 L3 隧道,直接把 IDC 机房的公网 IP “无损”搬回本地家里用!并且,这个方案几乎适用于所有云厂商架构的 VPS——不管你是单 IP 还是多 IP,也不管公网 IP 是直接绑在物理网卡上,还是 VPC 环境下的 1:1 NAT。最终,你都能在本地 Windows 或路由器的 WireGuard 接口上,直接获取并配置那个真实的公网 IP!
最爽的是,由于这是纯三层路由透传,你在本地获得的是真正的 OpenInternet(全通透网络),而不是传统的 Fullcone NAT,没有任何 NAT 映射表限制,完全就是一台挂在公网上的设备。
根据 VPS 的网络架构,一共分为 4 种情况,以下是推荐顺序和优缺点:
1. 双公网 IP 直绑网卡:最优雅,配置最简单,能 100% 透传完整的 IP 和所有端口。
2. 单公网 IP 直绑网卡:配置极具“魔法”色彩。一台 VPS 既能自己联网,又能把同一个 IP 完美透传给家里,代价是仅仅被 VPS 占用了 SSH 和 WG 两个端口。
3. VPC 环境双内网 IP (绑双 EIP):能透传完整的端口,但流量会经过云厂商和我们自己配置的两次 1:1 NAT。
4. VPC 环境单内网 IP (绑单 EIP):如 Azure/AWS 等常见环境。经过两次 1:1 NAT,且少数端口被 VPS 宿主劫持。
哪怕是最苛刻的“单公网 IP”情况,我们也可以利用 Linux 内核 Netfilter 机制的“神乎其技”,让 VPS 和家里的设备共享这唯一的一个公网 IP 且互不干扰!
第一种魔法:双公网 IP 直绑网卡(Native Routing)
假设你的 VPS 直接拥有两个 IP,网络配置如下:
网卡 eth0 IP:1.0.0.2 (网关 1.0.0.1)
额外附加 IP:2.0.0.2/32
很多 IDC 机房底层其实是 L2 隔离的,路由器会响应整个子网的 ARP 请求,将数据包强行发给网关。根据机房策略,发往 2.0.0.2 的包也会送到你的 VPS 物理网卡上(有时需要我们在 Linux 上配置 ARP 代理来举手响应)。
接下来就是纯路由的艺术:WireGuard 本身就是一个工作在三层的网卡。我们只需要在 Linux 系统里写一条简单的路由规则,把进入内核、目的地址为 2.0.0.2 的数据包全部扔进 wg0 隧道;同时,从隧道出来的源地址为 2.0.0.2 的包正常从 eth0 发向网关。干净利落,一个纯净的公网 IP 就透传到家了!
第二种魔法:单公网 IP 直绑网卡(Port Hijacking)
如果你只有一个 IP(比如 1.0.0.2),想在一台机器上同时当 VPS 跑服务,又要把这个 IP 拿回家用,这就要动用更深层的 iptables 魔法了。
核心思路是:在数据包刚进入网卡的 PREROUTING 链时横插一刀,把我们要维持 VPS 控制权的端口(如 22/tcp 的 SSH、51820/udp 的 WireGuard)强行 REDIRECT 劫持进 INPUT 链,交给 VPS 自己处理。而对于其他所有流量,放行它们进入 FORWARD 链,顺着路由表直接塞进隧道,直达本地设备!
你会问:那 VPS 自己发出的请求怎么上网?答案是:什么都不用动,内核的 Conntrack(连接跟踪)机制会完美处理一切冲突!
当然,这种极限操作也是有代价的:首先 22 和 51820 端口你本地设备无法使用了;其次,如果极小概率下,VPS 和本地 Windows 碰巧使用相同的源端口向外发包,Linux 强大的底层机制会自动将 Windows 的包 NAT 转换成另一个随机源端口发送。虽然对上网毫无影响,但有洁癖的极客可能会觉得有一点点不完美。
第三种魔法:烦人的 VPC 环境(公有云 1:1 NAT)
像 Azure、AWS 这种云平台,虽然管理灵活,但强制了 VPC 私有网络。你的 VPS 网卡上只有一个如 10.0.0.4 的私网 IP,公网 IP 是云平台在最外层网关给你做的 1:1 NAT映射。
这层限制怎么打破?我们以其人之道还治其身,在 Linux 内部再做一层 NAT 欺骗!
具体做法是:对于从外网进来发往 10.0.0.4 的流量,我们在 PREROUTING 链通过 DNAT 将目的地址改写成真实的公网 IP,这样包就能被合法地塞进那条以公网 IP 为核心的隧道里。而对于本地 Windows 顺着隧道发出来的流量(源 IP 是公网 IP),我们在其离开物理网卡前的 POSTROUTING 链,通过 SNAT 将源地址伪装成 10.0.0.4 交给云平台的网关。包一旦经过VPC,云平台又会把它变回公网 IP。
这种套娃式的“魔法”完美绕过了 VPC 的限制,代价仅仅是极小的一点点 Netfilter 性能损耗。接下来,我会带大家一步步实操部署这些配置!
首先是安装必要的套件
sudo apt update
sudo apt install wireguard iptables nano -y
發佈留言
很抱歉,必須登入網站才能發佈留言。