he-ipv6配置

举报
yd_234230482 发表于 2026/11/06 10:48:44 2026/11/06
【摘要】 #!/usr/bin/env bash 使用 bash 解释器执行 set -e: 脚本执行过程中遇到错误立即退出 set -u: 遇到未定义的变量名立即退出 set -o pipefail: 只要管道命令中有一个失败,整个管道就视为失败set -euo pipefail 配置文件路径,存放 HE 提供的 IPv4/IPv6 地址信息CONF=“/etc/he-ipv6.conf” 检查配置...

#!/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 “TUN"modesitremote"TUN" mode sit remote "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 “CLIENTIPV6/64"dev"{CLIENT_IPV6}/64" dev "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∣∣trueiplinkdel"TUN" 2>/dev/null || true ip link del "TUN” 2>/dev/null || true
}

简单的命令行参数解析

case “${1:-}” in
start) start ;;
stop) stop ;;
restart) stop; start ;;
*) echo “Usage: $0 {start|stop|restart}”; exit 2 ;;
esac

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。