前言
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