很多身在海外的人,常常都遇到这样的问题:想用国内的软件,却提示“区域受限”、“购物软件打开就提示切换国际版”、“软件不能正常打开和使用”等问题。想看国内视频,却也是打不开,甚至一些支付、办公服务都无法正常使用。
那么解决这一问题的办法就是——搭建一个“回国的魔法”,让你的设备通过国内服务器中转,从而获得“像在国内一样”的网络环境。
本文将手把手教你,如何使用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
WG_PORT=51820 WG_NET=10.11.11.0 WG_MASK=24 WG_INTERFACE=wg0 WG_PATH=/etc/wireguard
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)
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
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 true; do menu done
|
然后赋予权限:
运行脚本:
如果出现这个报错:
不要急,这是因为脚本在Windows编辑器里保存过,然后传到Linux上跑,结果文件里多了\r回车符,导致Linux Shell无法解析。
✅解决方法
用dos2unix转换
1 2
| sudo apt install -y dos2unix dos2unix 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状态
能看到[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、没开启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,要改成你服务器实际的网卡名,执行以下命令查看:
然后再次访问一个网站看看是否能够访问成功,做到这一步其实已经能够访问成功了。
之后你访问以下地址,查看“从国内测试”,这个测的是从国内访问网站所使用的IP,如果你能访问成功,那么你的IP就是你的服务器IP,而不是你之前没有开启隧道的IP,这里我展示两张图片做对比。
这一张是我没有开启隧道的IP,显示的是我原本的IP,某某市。
而这一张是我开启隧道之后的IP,也就是我的服务器IP,可以看到显示的地点是北京。
他是直接改了我原本访问国内网站所使用的国内IP,访问国外的网站走的流量还是国内的流量,如果你打开这个网站测试的时候,你会看到从“谷歌测试”的IP是没有的,也就是说改的是国内IP,而不是你挂了一个IP。这就证明搭建成功了。
之后你就可以把这个二维码或者配置文件,自己用或者发给你身在海外的朋友进行使用。
好了,本篇文章到此结束。
三连加关注,追文不迷路。