海外党出国党必看,手把手教你搭建个人回国VPN,让你在海外也能使用国内网络,解决身在海外无法使用国内软件问题.md

很多身在海外的人,常常都遇到这样的问题:想用国内的软件,却提示“区域受限”、“购物软件打开就提示切换国际版”、“软件不能正常打开和使用”等问题。想看国内视频,却也是打不开,甚至一些支付、办公服务都无法正常使用。

那么解决这一问题的办法就是——搭建一个“回国的魔法”,让你的设备通过国内服务器中转,从而获得“像在国内一样”的网络环境。

本文将手把手教你,如何使用WireGuard搭建一个安全、稳定、隐蔽的回国专线、零基础也能快速上手。

不会搭建的可联系博主代搭建。

首先你需要一台国内的服务器,服务器可以去阿里云、腾讯云、京东云等大厂的服务器,或者其他厂商的也可以,我这里使用的是阿里云的服务器,之前做活动,99一年。你们在选购服务器的时候,区域尽量选择距离自己近的,这样网速快一些。

我的服务器系统是Ubuntu 22.04 64位。

接下来开始搭建。

1.准备工作

  • 国内服务器:Ubuntu 20.04 / 22.04(建议带宽 ≥20M,稳定网络)
  • 海外朋友的设备:Windows / Mac / iOS / Android 都支持
  • 开放 UDP 端口:51820(WireGuard 默认端口,也可以自定义)

2.安装WireGuard

在服务器上执行:

1
2
sudo apt update
sudo apt install -y wireguard iptables-persistent

这里我写了一个一键安装的脚本,在桌面新建一个文档,后缀改为“.sh”,然后把下边的代码粘贴进去,保存之后上传到服务器中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/bin/bash
# WireGuard 一键安装脚本 for Ubuntu
# 功能:安装、配置、添加用户、生成二维码
# 作者:W不懂安全

WG_PORT=51820
WG_NET=10.11.11.0
WG_MASK=24
WG_INTERFACE=wg0
WG_PATH=/etc/wireguard

# 获取公网 IP
SERVER_IP=$(curl -s https://api.ip.sb/ip || curl -s https://ipinfo.io/ip)

install_wg() {
    # 开启系统转发
    sed -i 's/#\?net.ipv4.ip_forward=.*/net.ipv4.ip_forward=1/' /etc/sysctl.conf
    sysctl -p

    # 生成服务端密钥
    umask 077
    [ ! -f $WG_PATH/server_private.key ] && wg genkey | tee $WG_PATH/server_private.key | wg pubkey > $WG_PATH/server_public.key

    SERVER_PRIV=$(cat $WG_PATH/server_private.key)
    SERVER_PUB=$(cat $WG_PATH/server_public.key)

    # 写 wg0.conf
    cat > $WG_PATH/$WG_INTERFACE.conf <<EOF
[Interface]
Address = ${WG_NET%.*}.1/$WG_MASK
ListenPort = $WG_PORT
PrivateKey = $SERVER_PRIV
PostUp   = iptables -t nat -A POSTROUTING -s ${WG_NET}/$WG_MASK -o \$(ip route get 1.1.1.1 | awk '{print \$5; exit}') -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s ${WG_NET}/$WG_MASK -o \$(ip route get 1.1.1.1 | awk '{print \$5; exit}') -j MASQUERADE
EOF

    systemctl enable wg-quick@$WG_INTERFACE
    systemctl start wg-quick@$WG_INTERFACE
    echo "✅ WireGuard 已安装并启动"
}

add_client() {
    CLIENT_NAME=$1
    CLIENT_PRIV=$(wg genkey)
    CLIENT_PUB=$(echo $CLIENT_PRIV | wg pubkey)
    CLIENT_IP=${WG_NET%.*}.$((2+$(ls $WG_PATH/clients 2>/dev/null | wc -l)))

    mkdir -p $WG_PATH/clients

    # 服务端增加 Peer
    echo -e "\n[Peer]\n# $CLIENT_NAME\nPublicKey = $CLIENT_PUB\nAllowedIPs = $CLIENT_IP/32" >> $WG_PATH/$WG_INTERFACE.conf
    systemctl restart wg-quick@$WG_INTERFACE

    SERVER_PUB=$(cat $WG_PATH/server_public.key)

    # 生成客户端配置
    cat > $WG_PATH/clients/${CLIENT_NAME}.conf <<EOF
[Interface]
PrivateKey = $CLIENT_PRIV
Address = $CLIENT_IP/$WG_MASK
DNS = 223.5.5.5,114.114.114.114

[Peer]
PublicKey = $SERVER_PUB
Endpoint = $SERVER_IP:$WG_PORT
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
EOF

    echo "✅ 客户端配置已生成: $WG_PATH/clients/${CLIENT_NAME}.conf"
    qrencode -t ansiutf8 < $WG_PATH/clients/${CLIENT_NAME}.conf
}

remove_client() {
    CLIENT_NAME=$1
    CLIENT_CONF=$WG_PATH/clients/${CLIENT_NAME}.conf
    if [ -f "$CLIENT_CONF" ]; then
        CLIENT_PUB=$(grep "PrivateKey" $CLIENT_CONF | awk '{print $3}' | wg pubkey)
        sed -i "/$CLIENT_PUB/,+1d" $WG_PATH/$WG_INTERFACE.conf
        systemctl restart wg-quick@$WG_INTERFACE
        rm -f $CLIENT_CONF
        echo "✅ 已删除客户端 $CLIENT_NAME"
    else
        echo "❌ 未找到客户端配置"
    fi
}

menu() {
    clear
    echo "========== WireGuard 管理脚本 =========="
    echo "1) 安装 WireGuard"
    echo "2) 添加客户端"
    echo "3) 删除客户端"
    echo "4) 查看状态"
    echo "0) 退出"
    echo "======================================="
    read -p "请选择: " choice
    case $choice in
        1) install_wg ;;
        2) read -p "输入客户端名称: " name; add_client $name ;;
        3) read -p "输入要删除的客户端名称: " name; remove_client $name ;;
        4) wg show ;;
        0) exit 0 ;;
        *) echo "无效选择" ;;
    esac
}

while truedo
    menu
done

然后赋予权限:

1
chmod +x wg-install.sh

运行脚本:

1
bash wg-install.sh

如果出现这个报错:

不要急,这是因为脚本在Windows编辑器里保存过,然后传到Linux上跑,结果文件里多了\r回车符,导致Linux Shell无法解析。

✅解决方法

用dos2unix转换

1
2
sudo apt install -y dos2unix
dos2unix wg-install.sh

之后再次执行

1
bash wg-install.sh

你就能看到管理面板的页面了。

第一次选择1→安装WireGuard。

然后选择2→添加客户端(输入一个名字,比如friend1),然后就会生成:

1
/etc/wireguard/clients/friend1.conf

终端还会打印二维码,手机WireGuard App直接扫码即可。

可能你会感到疑惑,为什么运行一个脚本之后,又回到面板,处于一个循环的状态,不要担心,这是正常的,因为脚本代码加着循环操作,不用过于在意。

🔍那么怎么判断是否成功了呢?

1、WireGuard服务器是否允许:

1
systemctl status wg-quick@wg0

看到Active: active (exited)就说明wg0配置已经加载成功。

2、查看WireGuard状态

1
wg show

能看到[Interface]和[Peer]信息,说明服务端和用户都配置好了。

检查无误后,使用Qrencode把friend1.conf生成二维码,然后使用WireGuard APP去扫描二维码,或者你也可以把friend1.conf下载到本地桌面,然后传到手机里,在手机上的WireGuard导入配置文件即可。

执行以下命令生成二维码。

1
qrencode -o /root/client1.png -t PNG < /etc/wireguard/clients/friend1.conf

如果出现这个报错,不要担心,这只是你没有安装Qrencode这个工具。

执行以下命令来安装:

1
sudo apt install -y qrencode

之后再执行生成二维码命令。

执行完成之后,你当前目录底下会多出来一个client1.png的图片文件。

然后将图片下载到本地,我这里用的是FinalShell连接工具,可以直接下载到本地。

之后打开WireGuard APP进行扫描,以下是软件下载地址:

1
https://www.wireguard.com/install/

根据自己对应的系统来进行下载,我的是安卓系统,如果你没有谷歌商店,那就点击下方的Download APKFile。

图标是这个,别下载错了。

打开软件,点击右下角+号,然后选择扫描二维码。

扫描你刚刚生成的二维码。

如果你出现这个提示错误,那么可能是conf的配置文件配置错误了。

执行这个命令编辑friend1.conf文件。

1
nano /etc/wireguard/clients/friend1.conf

找到[Peer]部分。

如果你的Peer内容是:

1
2
3
4
5
6
7
Endpoint = <html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>^M:51820

那么证明这是错误的。

正确的做法是:

1
2
3
4
5
[Peer]
PublicKey = (这里保持不变)
Endpoint = 你的服务器IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

之后保存conf配置文件,然后执行以下命令重新生成二维码。

1
qrencode -o /root/client1.png -t PNG < /etc/wireguard/clients/friend1.conf

再次使用WireGuard APP扫描二维码,这次不报错了,弹出个窗口,随便写个名称即可。

对了,还有就是不要忘记放行端口,不然是没有用的,国内服务器除了在操作系统中放行端口,还要在厂商网站控制台设置出行放行端口。

Ubuntu执行以下命令放行端口:

1
2
sudo ufw allow 51820/udp
sudo ufw reload

在手机上开启隧道,然后随便找个国内网站进行访问,如果能正常访问,证明没问题。如果不能访问,那就跟着我继续操作。

在服务器上执行:

1
sudo wg show

如果出现这个说明客户端和服务器是已经能够相互通信了,但是此时你访问不了网站。

1、没开启IP转发,在服务器上执行以下命令:

1
sysctl -w net.ipv4.ip_forward=1

再写入配置文件保证重启后生效:

1
2
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sysctl -p

2、没做NAT转换,我的服务器是阿里云,出口网卡是eth0,执行以下命令设置NAT转换:

1
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

⚠️注意:如果网卡不是eth0,要改成你服务器实际的网卡名,执行以下命令查看:

1
ip addr

然后再次访问一个网站看看是否能够访问成功,做到这一步其实已经能够访问成功了。

之后你访问以下地址,查看“从国内测试”,这个测的是从国内访问网站所使用的IP,如果你能访问成功,那么你的IP就是你的服务器IP,而不是你之前没有开启隧道的IP,这里我展示两张图片做对比。

1
https://www.ip111.cn/

这一张是我没有开启隧道的IP,显示的是我原本的IP,某某市。

而这一张是我开启隧道之后的IP,也就是我的服务器IP,可以看到显示的地点是北京。

他是直接改了我原本访问国内网站所使用的国内IP,访问国外的网站走的流量还是国内的流量,如果你打开这个网站测试的时候,你会看到从“谷歌测试”的IP是没有的,也就是说改的是国内IP,而不是你挂了一个IP。这就证明搭建成功了。

之后你就可以把这个二维码或者配置文件,自己用或者发给你身在海外的朋友进行使用。

好了,本篇文章到此结束。

三连加关注,追文不迷路。


海外党出国党必看,手把手教你搭建个人回国VPN,让你在海外也能使用国内网络,解决身在海外无法使用国内软件问题.md
https://crossborderblog.top/article/海外党&出国党必看,手把手教你搭建个人回国VPN,让你在海外也能使用国内网络,解决身在海外无法使用国内软件问题/
作者
W不懂安全
发布于
2026年1月12日
许可协议