5

目标是经常更改具有多个接口和实时 ip 的机器上的默认传出源 ip。

我根据其文档使用 ip route replace default 并让脚本循环运行一段时间。它会在一段时间内很好地更改源 IP,但随后对机器的所有 Internet 访问都将丢失。必须从 Web 界面远程重新启动才能正常工作

有什么东西可能会阻止它稳定工作。我在不止一台服务器上试过这个?

以下是一个最小示例

# extract all currently active source ips except loopback
IPs="$(ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 |
awk '{ print $1}')"

read -a ip_arr <<<$IPs

# extract all currently active mac / ethernet addresses
Int="$(ifconfig  | grep 'eth'| grep -v 'lo' | awk '{print $1}')"
read -a eth_arr <<<$Int

ip_len=${#ip_arr[@]}
eth_len=${#eth_arr[@]}

i=0;
e=0;

while(true); do

    #ip route replace 0.0.0.0 dev eth0:1 src 192.168.1.18
    route_cmd="ip route replace 0.0.0.0 dev ${eth_arr[e]} src ${ip_arr[i]}"
    echo $route_cmd
    eval $route_cmd

    sleep 300

    (i++)
    (e++)

    if [ $i -eq $ip_len ]; then
        i=0;
        e=0;
        echo "all ips exhausted - starting from first again"
    #   break;
    fi

done
4

1 回答 1

4

我想发表评论,但由于我没有足够的积分,它不会让我。

考虑:

  • 在它再次运行之前改变延迟时间是否会改变它失败之前的迭代次数?
  • 每次更改时导出 ifconfig 和路由,以查看随着时间的推移是否有有意义的不同。也许对它进行一些基本测试(ping、nslookup 等) 基本上,找出它到底出了什么问题。还将您发送的命令导出到日志文件(每次更改的文本文件?)以查看其中的更改,以查看在 x 次迭代后是否有些不同。
  • 什么连接丢失了?进来?外向?具体应用?
  • 您说您在其他服务器上使用/执行此操作没有问题?
  • IP 是:静态(/etc/network/interfaces)、bootp/DHCP、半静态(bootp/DHCP 服务器服务,基于 MAC 地址),如果由 bootp/DHCP 服务,租约期限是多少?

最后一点:bootp/dhcp 将在 x 持续时间内提供 IP。说它的60分钟。一半时间后,它将与 bootp/dhcp 服务器“检查”它是否可以保留 IP,并将租约再次延长至 60 分钟,这可能意味着 ifconfig 上的小重新配置(甚至可能与您的脚本同时?)。

hth

于 2015-06-22T09:33:53.227 回答