iconsulting/scripts/setup-network.sh

126 lines
3.8 KiB
Bash

#!/bin/bash
#===============================================================================
# 服务器网络路由配置脚本
#
# 配置双网卡路由,确保 Claude API 请求通过专用出口 IP
#
# 服务器配置:
# - 14.215.128.96: 对外服务网卡 (用户访问入口)
# - 154.84.135.121: 专用出口网卡 (用于连接 Claude API)
# - 67.223.119.33: Claude API 服务器
#
# 使用前请根据实际情况修改网卡名称和网关
#===============================================================================
set -e
# 配置变量 (请根据实际情况修改)
PUBLIC_IP="14.215.128.96" # 对外服务 IP
OUTBOUND_IP="154.84.135.121" # Claude API 出口 IP
CLAUDE_API_SERVER="67.223.119.33" # Claude API 服务器
# 网卡名称 (需要根据实际情况修改)
# 使用 ip addr 查看网卡名称
PUBLIC_INTERFACE="eth0" # 对外服务网卡
OUTBOUND_INTERFACE="eth1" # Claude API 出口网卡
# 网关 (需要根据实际情况修改)
# 使用 ip route 查看默认网关
OUTBOUND_GATEWAY="" # 出口网卡的网关
#===============================================================================
# 检查是否为 root
#===============================================================================
if [ "$EUID" -ne 0 ]; then
echo "请使用 root 权限运行此脚本"
exit 1
fi
#===============================================================================
# 显示当前网络配置
#===============================================================================
echo "当前网络配置:"
echo "============================================"
echo ""
echo "网卡信息:"
ip addr show
echo ""
echo "路由表:"
ip route show
echo ""
#===============================================================================
# 配置路由
#===============================================================================
if [ -z "$OUTBOUND_GATEWAY" ]; then
echo "错误: 请设置 OUTBOUND_GATEWAY 变量"
echo ""
echo "使用以下命令查看网关:"
echo " ip route | grep default"
echo ""
echo "然后编辑此脚本,设置 OUTBOUND_GATEWAY 变量"
exit 1
fi
echo "配置 Claude API 路由..."
echo " 目标: $CLAUDE_API_SERVER"
echo " 出口 IP: $OUTBOUND_IP"
echo " 出口网卡: $OUTBOUND_INTERFACE"
echo " 网关: $OUTBOUND_GATEWAY"
echo ""
# 删除已存在的路由 (如果有)
ip route del "$CLAUDE_API_SERVER" 2>/dev/null || true
# 添加路由规则
ip route add "$CLAUDE_API_SERVER" via "$OUTBOUND_GATEWAY" dev "$OUTBOUND_INTERFACE" src "$OUTBOUND_IP"
echo "路由配置完成!"
echo ""
#===============================================================================
# 验证配置
#===============================================================================
echo "验证路由配置:"
ip route get "$CLAUDE_API_SERVER"
echo ""
#===============================================================================
# 持久化配置
#===============================================================================
echo "保存路由配置到 /etc/rc.local..."
# 创建 rc.local 如果不存在
if [ ! -f /etc/rc.local ]; then
cat > /etc/rc.local << 'RCLOCAL'
#!/bin/bash
# rc.local - 开机自动执行的脚本
exit 0
RCLOCAL
chmod +x /etc/rc.local
fi
# 检查是否已添加
if ! grep -q "Claude API" /etc/rc.local; then
# 在 exit 0 之前插入路由命令
sed -i "/^exit 0/i # Claude API 出口路由\nip route add $CLAUDE_API_SERVER via $OUTBOUND_GATEWAY dev $OUTBOUND_INTERFACE src $OUTBOUND_IP 2>/dev/null || true\n" /etc/rc.local
echo "已添加到 /etc/rc.local"
else
echo "路由配置已存在于 /etc/rc.local"
fi
echo ""
echo "============================================"
echo "网络配置完成!"
echo ""
echo "测试连接:"
echo " curl -v --interface $OUTBOUND_IP https://api.anthropic.com/v1/messages"
echo ""