前言
1月13日,阿里云推出首款全新升级的轻量应用服务器“通用型实例”,峰值带宽 200Mbps,虽然是共享带宽, 但实际上高峰期也能保持个 50Mbps 左右的速度,在家里云普遍上传超不过 70Mbps,各家纷纷回收公网 IP 的今天,无疑还是够用的,价格相对来说还算能够接受,成为了家里云穿透的最佳首选。
1月17日,腾讯云也推出了轻量应用服务器“锐驰型套餐”限量内测,同样峰值带宽 200Mbps,部分地域还支持开启 ipv6,价格性能更具竞争力,进一步丰富了市场选择。
脚本部署 Wirguard 内网穿透
一键安装
你可以通过以下命令直接运行远程脚本,无需克隆仓库:
curl -sSL https://git.anye.xyz/Anye/wg-piercing/raw/branch/main/wg-piercing.sh | bash脚本功能
脚本提供了以下功能:
- 一键安装:自动安装 WireGuard 和相关依赖,生成密钥对,配置服务端和客户端,并启动 WireGuard 服务。 
- 停止服务:停止 WireGuard 服务并清理相关配置。 
- 退出:退出脚本。 
使用步骤
- 运行脚本后,选择 - 1) 一键安装选项。
- 脚本会自动生成客户端配置和二维码,请妥善保存这些信息。 
- 使用生成的客户端配置连接到 WireGuard 服务器,享受内网穿透服务。 
注意事项
- 脚本会记录日志到 - /var/log/wireguard_setup.log,方便排查问题。
- 客户端配置和二维码仅显示一次,请务必妥善保存。 
- 如果需要停止服务,可以选择 - 2) 停止服务选项。
脚本示例
#!/bin/bash
set -e
# 日志记录函数
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> /var/log/wireguard_setup.log
}
# 获取服务器 IP
get_server_ip() {
  SERVER_IP=$(ip addr show $(ip route | grep default | awk '{print $5}') | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)
}
# 安装必要的软件包
install_wireguard() {
  log "正在安装 WireGuard 和相关依赖..."
  apt update && apt install -y wireguard qrencode curl || { log "安装失败"; exit 1; }
}
# 获取公网服务器 IP
get_public_ip() {
  log "获取公网 IP..."
  PUBLIC_IP=$(curl -s 4.ipw.cn)
  if [ -z "$PUBLIC_IP" ]; then
    log "无法获取公网 IP,请检查网络连接。"
    exit 1
  fi
  log "公网 IP: $PUBLIC_IP"
}
# 生成密钥对
generate_keys() {
  log "生成服务器私钥和公钥..."
  SERVER_PRIVATE_KEY=$(wg genkey)
  SERVER_PUBLIC_KEY=$(echo "$SERVER_PRIVATE_KEY" | wg pubkey)
  log "生成客户端私钥和公钥..."
  CLIENT_PRIVATE_KEY=$(wg genkey)
  CLIENT_PUBLIC_KEY=$(echo "$CLIENT_PRIVATE_KEY" | wg pubkey)
}
# 配置服务端
configure_server() {
  log "配置服务端..."
  WG_CONFIG="/etc/wireguard/wg0.conf"
  cat > "$WG_CONFIG" <<EOF
[Interface]
Address = 10.9.0.1/24
PrivateKey = $SERVER_PRIVATE_KEY
ListenPort = 65535
[Peer]
PublicKey = $CLIENT_PUBLIC_KEY
AllowedIPs = 10.9.0.2/32
EOF
  chmod 600 "$WG_CONFIG"
}
# 配置客户端并生成二维码
configure_client() {
  log "配置客户端并生成二维码..."
  CLIENT_CONFIG=$(cat <<EOF
[Interface]
Address = 10.9.0.2/24
DNS = 119.29.29.29, 223.6.6.6
PrivateKey = $CLIENT_PRIVATE_KEY
[Peer]
PublicKey = $SERVER_PUBLIC_KEY
Endpoint = $PUBLIC_IP:65535
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF
  )
  # 输出提示信息
  echo "============================================================"
  echo "以下客户端配置和二维码仅显示一次,请妥善保存!"
  echo "============================================================"
  # 输出客户端配置
  echo "客户端配置: "
  echo "$CLIENT_CONFIG"
  # 生成二维码
  echo "客户端配置二维码: "
  echo "$CLIENT_CONFIG" | qrencode -t ansiutf8
  # 再次提示
  echo "============================================================"
  echo "以上客户端配置和二维码仅显示一次,请妥善保存!"
  echo "============================================================"
}
# 启动 WireGuard 服务
start_wireguard() {
  log "启动 WireGuard 服务..."
  wg-quick up wg0 || { log "启动失败"; exit 1; }
  log "启用 IP 转发..."
  sysctl -w net.ipv4.ip_forward=1
  log "配置 iptables..."
  get_server_ip
  iptables -t nat -I PREROUTING -p udp --dport 65535 -j ACCEPT
  iptables -t nat -A PREROUTING -d $SERVER_IP -j DNAT --to-destination 10.9.0.2
  iptables -t nat -A POSTROUTING -j MASQUERADE
}
# 停止 WireGuard 服务
stop_wireguard() {
  log "停止 WireGuard 服务..."
  wg-quick down wg0 || { log "停止失败"; exit 1; }
  log "禁用 IP 转发..."
  sysctl -w net.ipv4.ip_forward=0
  log "移除 iptables 规则..."
  get_server_ip
  iptables -t nat -D PREROUTING -p udp --dport 65535 -j ACCEPT
  iptables -t nat -D PREROUTING -d $SERVER_IP -j DNAT --to-destination 10.9.0.2
  iptables -t nat -D POSTROUTING -j MASQUERADE
}
# 主菜单
echo "WireGuard 管理脚本"
echo "1) 一键安装"
echo "2) 停止服务"
echo "3) 退出"
read -p "请选择一个选项: " option
case $option in
  1)
    install_wireguard
    get_public_ip
    generate_keys
    configure_server
    configure_client
    start_wireguard
    ;;
  2)
    stop_wireguard
    ;;
  3)
    exit 0
    ;;
  *)
    echo "无效选项"
    exit 1
    ;;
esac