centos系统安装好后运行于主机模式,并没有开启包转发功能。即系统只处理目的地为本机的数据包,不会转发发往其他地址的数据包。在内核中有相应配置选项net.ipv4.ip_forward
默认设置为0。可以通过命令sysctl net.ipv4.ip_forward=1
手动开启包转发功能。
防火墙的masquerade功能进行地址伪装(NAT),私网访问公网或公网访问私网都需要开启此功能来进行地址转换,否则无法正常互访。通过命令firewall-cmd --add-masquerade 开启此功能,开启之后net.ipv4.ip_forward的值自动被设置为1,即centos启用包转发。当然,如果启用了masquerade而不启用包转发的设置是没有意义的,相当于只有本机的数据能进出网络接口,那么NAT就没有意义了。下面以下图拓扑和配置在VM上做测试。1.S1 上防火墙开启.ip地址192.168.214.2 ,200.200.200.2
2.C1 IP 192.168.214.200 网关192.168.214.2
3.C2 IP 200.200.200.200 网关200.200.200.2
S1上防火墙的默认设置:
[root@s1 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33 ens37
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
查看包转发设置为0:
此时C1上ping200.200.200.2是通的,但是ping200.200.200.200无响应(因为此时S1不会为C1转发数据包)测试如下图:
执行firewall-cmd --add-masquerade开启masquerade功能,查看包转发选项已经自动被设置为1了。
从C1上已经可以ping通C2