ubuntu24 批量设置IPV6地址并使用gost代理,根据访问地址选择网络出口IP
需求描述:
服务器有一段/64的IPV6,使用gost作为代理,根据客户端的访问地址来选择出口IP
需要每天定时更换新的地址,每天5000条
例如: 前缀 1:1:1:1::/64
gost代理后,当客户端通过 1:1:1:1::aa 来连接代理时,用户所访问的地址都是通过这个地址连接的
解决方案:
sh脚本生成IP地址,每次生成5000个,先清除本机已经存在的地址后将新的地址配置生效
同时修改gost配置文件并自动重启gost服务
注意: 如果服务器有IPV4,并且目标网站仅支持IPV4,那么此时会自动使用V4地址
注意事项:
*** 如果你的服务器只有IPV6 千万不要使用这个脚本!!!!!!
*** 如果你的服务器只有IPV6 千万不要使用这个脚本!!!!!!
*** 如果你的服务器只有IPV6 千万不要使用这个脚本!!!!!!
如果执行出错可能会导致无法连接服务器!!!!!
步骤:
一. 设置gost服务
gost主程序/配置文件/证书等放入固定目录 /home/proxy/
证书名称为 cert.pem 和 key.pem
vi /etc/systemd/system/gost.service # 内容写入 [Unit] Description=Gost After=network.target Wants=network.target [Service] Type=simple ExecStart=/home/proxy/gost Restart=always [Install] WantedBy=multi-user.target # 保存后使服务生效 sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl enable --now gost.service
二.IP生成脚本
# 创建并打开update_ipv6.sh
vi /home/proxy/update_ipv6.sh
# 将以下内容写入文件
# 其中1:1:1:1换成自己的地址前缀,eth0根据实际情况修改
# ADDR_COUNT是生效生成的数量
# PORT是gost监听的端口
#!/bin/bash
# 配置参数
IFACE="eth0"
PREFIX="1:1:1:1"
ADDR_COUNT=5000
STATE_FILE="/home/proxy/ipv6_state.txt"
GOST_CONFIG="/home/proxy/gost.yaml"
PORT=5500
# 获取上次使用的地址编号
if [ -f "$STATE_FILE" ]; then
LAST_NUM=$(cat "$STATE_FILE")
else
LAST_NUM=0
fi
# 清除旧的 IPv6 地址(不包括 link-local)
echo "清除旧地址..."
ip -6 addr show dev $IFACE | grep -oP "$PREFIX::\K[0-9a-f:]+" | while read ip; do
ip_full="${PREFIX}::${ip}"
ip -6 addr del "${ip_full}/64" dev $IFACE
done
# 添加新地址并生成 GOST 配置项
echo "添加新地址..."
START_NUM=$((LAST_NUM + 1))
END_NUM=$((LAST_NUM + ADDR_COUNT))
echo "生成 $START_NUM 到 $END_NUM"
> "$GOST_CONFIG"
echo "services:" >> "$GOST_CONFIG"
for ((i=START_NUM; i<=END_NUM; i++)); do
HEX=$(printf "%x" $i)
IP="${PREFIX}::${HEX}"
ip -6 addr add "${IP}/64" dev $IFACE
cat <<EOF >> "$GOST_CONFIG"
- name: proxy_$i
addr: "[${IP}]:${PORT}"
protocol: http
tls:
cert_file: "cert.pem"
key_file: "key.pem"
metadata:
interface: ${IP}
EOF
done
# 保存新状态
echo "$END_NUM" > "$STATE_FILE"
# 重启 gost 服务
echo "重启 gost..."
systemctl restart gost
echo "完成"脚本保存成功后设置执行权限,再添加一个cron
chmod +x /home/proxy/update_ipv6.sh crontab -e 0 2 * * * /home/proxy/update_ipv6.sh >> /home/proxy/ipv6_update.log 2>&1 # 保存后重启cron服务 service cron restart

