最近在进行对现网的机器进行KVM调整 。在使用过程中,发现在对一台机器新增一个公网IP以后,通过service network restart重启网络生效生,所有的nat配置失效 。kvm里安装的windows主机通过radmin无法连接。而在KVM物理机上ping 里面的虚拟机,发现网络是通的 。

起初以为问题出在KVM本身上,通过命令先查看下网络状态 。

 1[root@kvm3 ~]# virsh  net-list
 2Name                 State      Autostart     Persistent
 3--------------------------------------------------
 4default              active     yes           yes
 5[root@kvm3 ~]# brctl show
 6bridge name     bridge id               STP enabled     interfaces
 7br0             8000.0026b949ae6e       no              eth0
 8br1             8000.0026b949ae70       no              eth1
 9                                                        vnet1
10                                                        vnet3
11                                                        vnet5
12virbr0          8000.5254003f3f47       yes             virbr0-nic
13                                                        vnet0
14                                                        vnet2
15                                                        vnet4

并未发现异常,接着查看路由

 1[root@kvm3 ~]# route
 2Kernel IP routing table
 3Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
 4xxx.91.235.xxx  *               255.255.255.248 U     0      0        0 br0
 5xxx.xxx.194.32   *               255.255.255.240 U     0      0        0 br0
 6192.168.8.0    *               255.255.255.0   U     0      0        0 br1
 7192.168.112.0   *               255.255.255.0   U     0      0        0 virbr0
 8link-local      *               255.255.0.0     U     1006   0        0 br1
 9link-local      *               255.255.0.0     U     1100   0        0 br0
10default         xxx.xxx.194.33   0.0.0.0         UG    0      0        0 br0

无奈试着重启下KVM主机

1[root@kvm3 ~]# virsh reboot kvm3-host1

发现问题依旧。开始重新分析问题 ———— 公网访问正常,内部ping也正常。既然如此,问题出现在nat上,iptables的nat配置也未发生改变。将网卡的IP配置还原后,问题还是一样。应该是出现在nat的问题上了。抱着试试看的态度,查下路由转发:

1[root@kvm3 ~]# cat /proc/sys/net/ipv4/ip_forward
20

发现其值竟然变成了0 ,问题终于找到了。先通过echo 1 > /proc/sys/net/ipv4/ip_forward 临时生效后,再通过公网nat连接虚拟机里的radmin和ssh 。一切又神奇的恢复了。

问题神奇了,重启个network服务不至于让该值变成0 ,改变再service network restart ,发现其值又变成了0 。再去/etc/sysctl.conf里看一下 ,真相大白于天下了。里面的默认配置用了0

1# Controls IP packet forwarding
2net.ipv4.ip_forward = 0

原来同事在安装完KVM后 ,并未做tcp/ip参数的优化,就连这个值也未改成永久生效 。接下来,将上面的值改成1 ,sysctl -p 生效。再去service network restart ,值还是1 。不过影响nat 转发了。长出了一口气,嗨…………