You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在带静态IP的云端Ubuntu虚拟机上搭建免费VPN,使多设备连接后使用家庭实验室域控制器作为首选DNS服务器

如何在带静态IP的云端Ubuntu虚拟机上搭建免费VPN,使多设备连接后使用家庭实验室域控制器作为首选DNS服务器

嘿,这个场景我刚好帮朋友配置过,用WireGuard完全能搞定——它免费、轻量,还支持Windows、Mac、iPhone几乎所有主流设备,配置起来也不算复杂,完美匹配你的需求。下面我一步步给你捋清楚整个流程:

整体思路先理清楚

因为你的家庭网络没有静态IP,直接从云端访问家里的域控制器(DC)是行不通的。所以我们需要先搭一条反向隧道:让家里的一台设备(比如你的DC本身,或者找个闲置的Linux小主机更稳定)主动连接到云端的WireGuard服务器,这样云端服务器就能打通到家庭内网的链路。之后外部设备(Windows/Mac/iPhone)连云端VPN时,就能通过这条隧道访问家里的DC,同时把DNS直接指向家里的DC内网IP。

具体配置步骤

1. 云端Ubuntu服务器配置WireGuard

首先登录你的云端Ubuntu虚拟机,先把WireGuard装上:

sudo apt update && sudo apt install wireguard -y

接下来生成服务器的密钥对(WireGuard靠密钥验证身份,非常安全):

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

执行完后,服务器的私钥存在/etc/wireguard/privatekey,公钥在/etc/wireguard/publickey,后面配置会用到。

然后创建WireGuard的核心配置文件/etc/wireguard/wg0.conf,复制下面的内容,记得替换掉占位符:

[Interface]
PrivateKey = 替换成你的云端服务器私钥(从/etc/wireguard/privatekey里复制)
Address = 10.0.0.1/24  # 这是VPN隧道用的网段,别和你的家庭内网、云端内网网段重复就行
ListenPort = 51820  # WireGuard默认的UDP端口,后面防火墙要开这个
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 这里先把DNS设为家里DC的IP,后面客户端也会用到
DNS = 192.168.x.x  # 替换成你家庭DC的内网IP,比如192.168.1.10

# 下面是家庭内网设备的Peer配置,用来建立反向隧道
[Peer]
PublicKey = 后面家庭设备生成的公钥
AllowedIPs = 192.168.x.0/24  # 替换成你的家庭内网网段,比如192.168.1.0/24
PersistentKeepalive = 25  # 每25秒发一次心跳,防止家庭网络换IP后隧道断开

配置文件权限要设成600,避免被其他人读取:

sudo chmod 600 /etc/wireguard/wg0.conf

启动WireGuard并设置开机自启:

sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0

最后别忘了开防火墙!不管是云端服务商的安全组(比如阿里云、AWS的安全组),还是Ubuntu自带的ufw,都要开放UDP 51820端口:

# 如果用ufw的话
sudo ufw allow 51820/udp
sudo ufw reload

2. 家庭内网设备配置WireGuard客户端(反向隧道)

选一台家里的设备来连云端服务器,推荐用Linux设备(稳定),如果是Windows的DC也可以装WireGuard客户端。这里以Linux为例:

先安装WireGuard,然后生成密钥对:

wg genkey | tee privatekey | wg pubkey | tee publickey

把生成的公钥复制出来,填到刚才云端服务器的wg0.conf的Peer部分里,然后重新加载云端的WireGuard配置:

sudo wg-quick down wg0 && sudo wg-quick up wg0

然后创建家庭设备的WireGuard配置文件wg-home.conf:

[Interface]
PrivateKey = 替换成家庭设备的私钥
Address = 10.0.0.2/32  # 隧道内的IP,和云端服务器在同一网段就行

[Peer]
PublicKey = 替换成云端服务器的公钥(从/etc/wireguard/publickey复制)
Endpoint = 你的云端服务器静态IP:51820
AllowedIPs = 10.0.0.0/24  # 只让VPN隧道的流量走这里,不用把家庭所有流量都发去云端
PersistentKeepalive = 25

启动客户端并设置开机自启:

sudo wg-quick up wg-home
sudo systemctl enable wg-quick@wg-home

这时候在云端服务器执行wg show,如果看到家庭设备的Peer状态是connected,就说明反向隧道通了。

3. 配置外部客户端(Windows/Mac/iPhone)

给你的Windows、Mac、iPhone都装上WireGuard客户端(官网就能免费下载),然后每个客户端都生成自己的密钥对。

接着回到云端服务器,在wg0.conf里给每个客户端加一段Peer配置:

[Peer]
PublicKey = 替换成这个客户端的公钥
AllowedIPs = 10.0.0.3/32  # 每个客户端分配一个唯一的隧道IP,比如10.0.0.3、10.0.0.4以此类推

加完后重新加载云端的WireGuard配置:

sudo wg-quick down wg0 && sudo wg-quick up wg0

然后给每个客户端写配置文件,比如iPhone的配置(Windows/Mac类似):

[Interface]
PrivateKey = 替换成这个客户端的私钥
Address = 10.0.0.3/32  # 和刚才云端配置里的AllowedIPs对应
DNS = 192.168.x.x  # 这里必须填你家庭DC的内网IP,确保客户端用它做DNS

[Peer]
PublicKey = 替换成云端服务器的公钥
Endpoint = 你的云端服务器静态IP:51820
AllowedIPs = 0.0.0.0/0, ::/0  # 让客户端所有流量都走VPN;如果只想让访问家庭内网和DNS走VPN,可以改成AllowedIPs = 192.168.x.0/24, 10.0.0.0/24
PersistentKeepalive = 25

把配置导入客户端的WireGuard应用,连接上之后就能测试了——比如在Windows上打开命令提示符,执行nslookup your-domain.local,应该能通过家里的DC成功解析域名。

几个要注意的点

  • 家庭内网的WireGuard客户端一定要保持在线,最好设置开机自启,不然反向隧道断了,外部客户端就访问不到家里的DC了。
  • 检查云端服务器的IP转发是否开启:执行echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward,然后编辑/etc/sysctl.conf,把net.ipv4.ip_forward=1前面的注释去掉,这样服务器才能转发客户端的流量到家庭内网。
  • 如果家庭内网有防火墙,要允许WireGuard的出站流量到云端服务器的51820 UDP端口。

备注:内容来源于stack exchange,提问作者Ryan Vogel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:04:40