最近在进行对现网的机器进行KVM调整 。在使用过程中,发现在对一台机器新增一个公网IP以后,通过service network restart重启网络生效生,所有的nat配置失效 。kvm里安装的windows主机通过radmin无法连接。而在KVM物理机上ping 里面的虚拟机,发现网络是通的 。
起初以为问题出在KVM本身上,通过命令先查看下网络状态 。
[root@kvm3 ~]# virsh net-list Name State Autostart Persistent -------------------------------------------------- default active yes yes [root@kvm3 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.0026b949ae6e no eth0 br1 8000.0026b949ae70 no eth1 vnet1 vnet3 vnet5 virbr0 8000.5254003f3f47 yes virbr0-nic vnet0 vnet2 vnet4
并未发现异常,接着查看路由
[root@kvm3 ~]# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface xxx.91.235.xxx * 255.255.255.248 U 0 0 0 br0 xxx.xxx.194.32 * 255.255.255.240 U 0 0 0 br0 192.168.8.0 * 255.255.255.0 U 0 0 0 br1 192.168.112.0 * 255.255.255.0 U 0 0 0 virbr0 link-local * 255.255.0.0 U 1006 0 0 br1 link-local * 255.255.0.0 U 1100 0 0 br0 default xxx.xxx.194.33 0.0.0.0 UG 0 0 0 br0
无奈试着重启下KVM主机
[root@kvm3 ~]# virsh reboot kvm3-host1
发现问题依旧。开始重新分析问题 ———— 公网访问正常,内部ping也正常。既然如此,问题出现在nat上,iptables的nat配置也未发生改变。将网卡的IP配置还原后,问题还是一样。应该是出现在nat的问题上了。抱着试试看的态度,查下路由转发:
[root@kvm3 ~]# cat /proc/sys/net/ipv4/ip_forward 0
发现其值竟然变成了0 ,问题终于找到了。先通过echo 1 > /proc/sys/net/ipv4/ip_forward 临时生效后,再通过公网nat连接虚拟机里的radmin和ssh 。一切又神奇的恢复了。
问题神奇了,重启个network服务不至于让该值变成0 ,改变再service network restart ,发现其值又变成了0 。再去/etc/sysctl.conf里看一下 ,真相大白于天下了。里面的默认配置用了0
# Controls IP packet forwarding net.ipv4.ip_forward = 0
原来同事在安装完KVM后 ,并未做tcp/ip参数的优化,就连这个值也未改成永久生效 。接下来,将上面的值改成1 ,sysctl -p 生效。再去service network restart ,值还是1 。不过影响nat 转发了。长出了一口气,嗨…………