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