he-ipv6配置
#!/usr/bin/env bash
使用 bash 解释器执行
set -e: 脚本执行过程中遇到错误立即退出
set -u: 遇到未定义的变量名立即退出
set -o pipefail: 只要管道命令中有一个失败,整个管道就视为失败
set -euo pipefail
配置文件路径,存放 HE 提供的 IPv4/IPv6 地址信息
CONF=“/etc/he-ipv6.conf”
检查配置文件是否存在且可读,如果不存在则报错退出
[ -r “$CONF” ] || { echo “Missing $CONF”; exit 1; }
加载配置文件中的变量(SERVER_IPV4, CLIENT_IPV6 等)
source “$CONF”
定义虚拟网卡的名称
TUN=“he-ipv6”
函数:校验配置文件中必须包含的变量
require() {
local v=“$1”
使用间接引用检查变量是否为空。如果变量不存在或为空,则报错退出
[ -n “${!v:-}” ] || { echo “Missing $v in $CONF”; exit 1; }
}
必须提供的四个核心参数
require SERVER_IPV4 # HE 端的 IPv4 地址(Endpoint)
require LOCAL_IPV4 # 你 VPS 的公网 IPv4 地址(或者是 NAT 后的私网地址)
require CLIENT_IPV6 # HE 分配给你的 Client IPv6 地址(通常以 ::2 结尾)
require SERVER_IPV6 # HE 端的 Server IPv6 地址(通常以 ::1 结尾)
start() {
— 清理阶段:防止重复启动导致冲突 —
删除该网口上的默认路由
ip -6 route del ::/0 dev “$TUN” 2>/dev/null || true
清空该网口上的所有 IP 地址
ip -6 addr flush dev “$TUN” 2>/dev/null || true
删除已存在的旧网口
ip link del “$TUN” 2>/dev/null || true
— 建立阶段 —
创建 sit 模式的隧道(IPv6 over IPv4 封装)
local: 你 VPS 的地址,remote: HE 服务器地址,ttl: 设置为最大 255 跨越公网
ip tunnel add “SERVER_IPV4” local “$LOCAL_IPV4” ttl 255
启动虚拟网卡
ip link set “$TUN” up
设置网卡 MTU 为 1280 (IPv6 最小标准)
注意:由于隧道封装会增加头部开销,1280 能解决你之前遇到的 YouTube 连接超时问题
ip link set “$TUN” mtu 1280
给隧道网卡分配 HE 给你的 IPv6 地址
ip -6 addr add “TUN”
— 路由阶段:关键点 —
添加ipv6默认路由,适用于单ipv4服务器
ip -6 route replace ::/0 dev “$TUN”
原生有ipv6,只想分流使用下面
ip -6 route add default dev he-ipv6 metric 2048
尝试 ping 一下 HE 的服务端地址,触发隧道握手
ping6 -c 1 -W 2 “$SERVER_IPV6” >/dev/null 2>&1 || true
}
stop() {
停止时清理路由、地址并删除虚拟网口
ip -6 route del default dev “$TUN” metric 2048 2>/dev/null || true
下面这个适用于单ipv4环境,直接清理ipv6默认路由
ip -6 route del ::/0 dev “$TUN” 2>/dev/null || true
ip -6 addr flush dev “TUN” 2>/dev/null || true
}
简单的命令行参数解析
case “${1:-}” in
start) start ;;
stop) stop ;;
restart) stop; start ;;
*) echo “Usage: $0 {start|stop|restart}”; exit 2 ;;
esac
- 点赞
- 收藏
- 关注作者
评论(0)