IP命令--mesh路由重启后IP地址被重新分配的问题

如下查看当前的IP地址信息

root:/# ip addr show br-lan
16: br-lan:  mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:a0:bc:af:30:c0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.225/24 brd 192.168.1.255 scope global br-lan
       valid_lft forever preferred_lft forever
    inet 192.168.200.254/24 scope global br-lan
       valid_lft forever preferred_lft forever
    inet6 fe80::2a0:bcff:feaf:30c0/64 scope link 
       valid_lft forever preferred_lft forever

其中192.168.1.225是我的IP地址,192.168.200.254则是与服务器对接的IP地址,一旦此IP地址发生改变,路由便无法接受服务器的命令设置等等。

然而当路由重启的时候(或者刚开机的时候),如果把网线拔出来(即无网的状态),重启完成后再插上网线,IP信息就会变成下面这样。

下面是重启时拔出网线的IP信息
root/# ip addr show br-lan
16: br-lan:  mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:a0:bc:af:30:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.1/24 brd 192.168.200.255 scope global br-lan
       valid_lft forever preferred_lft forever
    inet 192.168.200.254/24 scope global secondary br-lan
       valid_lft forever preferred_lft forever
    inet6 fe80::2a0:bcff:feaf:30e0/64 scope link 
       valid_lft forever preferred_lft forever
可以看到IP地址还是这个192.168.200.254

但是重新插上网线之后,就会重新分配IP,那么192.168.200.254就会被刷掉!

# ############# release old lan ip ###############
插上网线之后就会触发网络配置的服务起来,板子就会重新获取IP,配置网络等
root:/# ip addr show br-lan
16: br-lan:  mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:a0:bc:af:30:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.107/24 brd 192.168.1.255 scope global br-lan
       valid_lft forever preferred_lft forever
    inet6 fe80::2a0:bcff:feaf:30e0/64 scope link 
       valid_lft forever preferred_lft forever
 可以看到,192.168.200.254这个IP被重新分配的,但正常是不应该刷掉这个IP地址,因为一旦刷掉,路由就无法接收服务器传过来的命令了!
 即此IP是路由与服务器正常“交流”的IP地址!

修正此BUG的方法:
修改/lib/netifd/dhcp.script文件
修改前如下:

case "$1" in
        deconfig)
                deconfig_interface		//释放IP
        ;;  
        renew|bound)
                setup_interface  		//绑定IP
        ;;  
esac

修改后如下:

case "$1" in
        deconfig)
                deconfig_interface
        ;;  
        renew|bound)
                setup_interface
                EST_server="$(uci get cymesh.mesh.est_server)"			//获取当前与mesh的ip地址,即192.168.200.254,保存到EST_server
                ret=$(ip addr |grep "inet $EST_server")
                if [ -z "$ret" ]; then
                        ip addr add dev br-lan $EST_server/255.255.255.0	//将EST_server中保存的地址重新设置,当插上网线时,会触发重新分配绑定IP地址的线程,当跑到这里的时候,就会被再次设为我们要的地址(192.168.200.254),即将br-lan设置为此ip
                        echo "-----add 192.168.200.254 to br-lan interface-------" > /dev/console
                fi    
        ;;  
esac

以上便已修复此BUG!

uci是openwrt的uci命令,下面是uci命令的参数

batch
export     []
import     []
changes    []
commit     []
add         
add_list   .
.
[.
[.
[.
[.
[.
附:ip addr 是查看ip信息的命令

你可能感兴趣的:(ip命令,ip命令)