Skip to content

通过wirguard搭建内网穿透的全部流程(主)

0
2026-11-08

以下为您整理出的一套从零搭建、避开所有实测大坑(内网 IP 误识别、51820 默认端口被运营商拦截、ARM 机禁用 IPv6 报错、AllowedIPs 全局劫持、以及 GCP DNS 丢失)的完整直通操作手册。下次在新机器或重装系统时,直接按顺序复制执行即可跑通。

前置条件确认 在开始前,确保谷歌云(GCP)网页控制台的 VPC 防火墙已放行入站流量(至少允许 UDP 4433 端口和 TCP 10001 端口,或像你的 hk1027 规则一样允许全部入站协议)。

第一步:在 GCP 服务端安装并配置 WireGuard

  1. 开启 BBR 网络加速 在 GCP 终端执行以下命令开启 BBR 并加载内核参数:Bash

    echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    

    验证: 执行 sysctl net.ipv4.tcp_congestion_control,输出 bbr 即为成功。

下载并运行 WireGuard 安装脚本ash

curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
sudo ./wireguard-install.sh
  1. 填写安装向导参数(关键避坑点) 脚本运行后会依次提示输入参数,请严格按以下标准填写,未特别说明的项直接按回车保持默认:

    • IPv4 or IPv6 public address: 必须手动改成 GCP 的外部公网 IP(如 35.220.240.98),切勿使用脚本默认识别出的 10.x.x.x 内网 IP。

    • Public interface: 保持默认(通常为 ens4),回车。

    • WireGuard interface name: 保持默认(wg0),回车。

    • Server WireGuard IPv4: 保持默认(10.66.66.1),回车。

    • Server WireGuard IPv6: 保持默认,回车。

    • Server WireGuard port: 手动输入 4433 后回车(避开默认的 51820 端口,防止被国内运营商直接丢包阻断)。

    • First / Second DNS resolver: 保持默认(1.1.1.1),回车。

    • Allowed IPs list: 保持默认,回车,再按任意键开始自动安装。

    • Client name: 输入 arm 并回车。

    • Client WireGuard IPv4 / IPv6: 一路回车保持默认(分配给 ARM 机的虚拟内网 IP 为 10.66.66.2)。

  2. 提取客户端配置内容 安装完成后,在 GCP 终端打印生成的客户端配置文件,复制屏幕输出的全部内容备用:Bash

    cat /root/wg0-client-arm.conf
    

    验证: 执行 sudo wg,确认 GCP 端显示 listening port: 4433。

第二步:在家里的 ARM 机器(客户端)配置并拨号

开启 BBR 并安装客户端组件 连接到家里的 ARM 机器终端,开启 BBR 并安装 WireGuard 环境:

echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
sudo apt update && sudo apt install wireguard resolvconf -y
  1. 创建并精简客户端配置文件(核心避坑点) 新建配置文件:Bash

    sudo nano /etc/wireguard/wg0.conf
    

    将刚才从 GCP 复制的配置粘贴进去,并必须完成以下 3 处修改(适配禁用 IPv6 的精简内核,并防止全局流量被劫持导致 ARM 机本地断网):

    • 修改 Address:删掉逗号及后面的 IPv6 地址,仅保留 IPv4。

    • 删除 DNS 行:直接删掉 DNS = 1.1.1.1,1.0.0.1 整行(既然只做内网穿透,不需要改动本地 DNS)。

    • 修改 AllowedIPs:将 0.0.0.0/0,::/0 改为 10.66.66.0/24(仅让虚拟局域网流量走隧道)。

    最终精简后的标准模板如下(替换为你实际的密钥):Ini, TOML

    [Interface]
    PrivateKey = <保留你生成的客户端私钥>
    Address = 10.66.66.2/32
    
    [Peer]
    PublicKey = <保留你生成的服务端公钥>
    PresharedKey = <保留你生成的预共享密钥>
    Endpoint = 35.220.240.98:4433
    AllowedIPs = 10.66.66.0/24
    PersistentKeepalive = 25
    

    (注:建议在末尾加上一行 PersistentKeepalive = 25,让处于家宽 NAT 后的 ARM 机每 25 秒主动向 GCP 发送一次心跳包,防止隧道闲置断开。) 按 Ctrl+O 回车保存,按 Ctrl+X 退出。

  2. 启动隧道并设置开机自启Bash

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

    验证: 在 ARM 机执行 ping 10.66.66.1 -c 4,看到 0% packet loss 且有毫秒延迟返回,说明跨国虚拟内网正式打通。

第三步:在 GCP 配置 10001 端口转发并永久保存

  1. 注入 iptables 端口映射与伪装规则 回到 GCP 终端,执行以下两条转发命令:Bash

    # 将外部访问 GCP 10001 端口的 TCP 流量转发给 ARM 机 (10.66.66.2:10001)
    sudo iptables -t nat -A PREROUTING -p tcp --dport 10001 -j DNAT --to-destination 10.66.66.2:10001
    
    # 将来源 IP 伪装成 GCP 的虚拟内网 IP,确保 ARM 机能顺着隧道原路返回网页数据
    sudo iptables -t nat -A POSTROUTING -p tcp -d 10.66.66.2 --dport 10001 -j MASQUERADE
    

    验证: 用手机断开 WiFi,使用 5G 流量访问 [http://35.220.240.98:10001](http://35.220.240.98:10001),网页正常加载。

  2. 修复 DNS 并安装规则固化工具 先修复 GCP 可能出现的 DNS 解析丢失问题,再安装持久化软件:Bash

    echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
    sudo apt update && sudo apt install iptables-persistent -y
    

    (安装过程中弹出全屏提示框询问是否保存当前 IPv4/IPv6 规则时,直接按回车选择 <Yes>。)

  3. 强制保存并验证Bash

    sudo netfilter-persistent save
    sudo cat /etc/iptables/rules.v4 | grep 10001
    

    验证: 终端打印出刚才配置的 DNAT 和 MASQUERADE 两条 10001 规则,即代表永久固化完成,重启服务器也不会失效。

  • 0

评论