linux下nat转发失效

最近在进行对现网的机器进行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 转发了。长出了一口气,嗨…………

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注