一、实验环境
1.说明:SNAT是针对源ip地址做的地址转换
2.软件:VMware 15 ,slave1与slave2系统都为centos 7
3.网络:Vmnet8 为nat类型网络 可想象为现实中的公网地址 可正常访问外网
VMnet1 与 vmnet7 都为仅主机类型的主机 ,可想象为现实中的内网地址,无法访问外网
4.拓扑图如下(sw为交换机)
二、前提配置
1. centos 克隆的配置
nmcli con add con-name ens33-static ifname ens33 type ethernet ipv4.addresses 101.101.100.30 ipv4.method manual
nmcli con up ens33-static
2.centos 7 的配置
nmcli con add con-name ens33-static ifname ens33 type ethernet ipv4.addresses 101.101.100.7 ipv4.method manual
nmcli con up ens33-static
nmcli con add con-name ens37-static ifname ens37 type ethernet ipv4.addresses 101.101.101.7/24 ipv4.gateway 101.101.101.37 ipv4.dns 223.5.5.5 ipv4.method manual
nmcli con up ens37-static
3.slave1的配置
nmcli con modify hadoop ipv4.method manual ipv4.addresses 192.168.18.131/24 ipv4.gateway 192.168.18.2 ipv4.dns 192.168.18.2 connection.autoconnect yes
nmcli con up hadoop
nmcli con add con-name ens37-static ifname ens37 type ethernet ipv4.addresses 101.101.101.37/24 ipv4.method manual
nmcli con up ens37-static
三、需求
1.需求一 在slave1 上使用iptables snat技术 允许 centos7访问intetnet
配置如下
1)slave1 的配置
iptables -t nat -A POSTROUTING -s 101.101.101.0/24 -o ens33 -j SNAT --to-source 192.168.18.131
2)slave1的配置开启路由转发功能
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -w net.ipv4.ip_forward=1
此时centos7已经可以正常访问外网,但是重启后则不同
注意:在实际的生活中固定的公网地址非常的昂贵,所以1)的配置方法并不完美,而且重启后规则就会失效
3)对需求1的完善(一)
MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。
iptables -t nat -A POSTROUTING -s 101.101.101.0/24 -o ens33 -j MASQUERADE
4)让规则持久化(永久生效)保证重启后规则仍旧存在
yum -y install iptables-services
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables --now
2.需求二
centos 使用iptables将centos克隆的流量实现snat转换成101.101.101.7 访问internet
1)centos克隆的配置
nmcli con modify ens33-static ipv4.gateway 101.101.100.7 ipv4.dns 8.8.8.8
nmcli con up ens33-static
2)centos7的配置
iptables -t nat -A POSTROUTING -s 101.101.100.0/24 -o ens37 -j MASQUERADE
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -w net.ipv4.ip_forward=1
yum -y install iptables-services
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables --now
3. 需求三
slave1上使用firewalld实现SNAT允许CentOS7访问Internet
假设在网关,基本ip都已经配置完成的情况下
在 slave1配值即可
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
说明:
本实验没有采用真实的私网与公网地址
网络知识点
1.私有地址
- 10.0.0.0~10.255.255.255
- 172.16.0.0~172.31.255.255
- 192.168.0.0~192.168.255.255
2.iptables中的“四表五链”及“堵通策略”
A.“四表”是指,iptables的功能——filter, nat, mangle, raw.
B.“五链”是指内核中控制网络的NetFilter定义的五个规则链,分别为
- PREROUTING, 路由前
- INPUT, 数据包流入口
- FORWARD, 转发管卡
- OUTPUT, 数据包出口
- POSTROUTING, 路由后
C.堵通策略是指对数据包所做的操作,一般有两种操作——“通(ACCEPT)”、“堵(DROP)”,
2..iptables命令
- -t :是指操作的表
- -A:在所选择的链末添加一条或更多规则。当源(地址)或者/与 目的(地址)转换为多个地址时,这条规则会加到所有可能的地址(组合)后面。
- -s:检查报文的源IP地址是否符合此处指定的范围,或是否等于此处给定的地址;
- -d:检查报文的目标IP地址是否符合此处指定的范围,或是否等于此处给定的地址;
- -p:匹配报文中的协议,可用值tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh 或者 "all", 亦可以数字格式指明协议;
- -i:限定报文仅能够从指定的接口流入;
- -o:限定报文仅能够从指定的接口流出;
- -j 目标跳转 指定规则的目标;也就是说,如果包匹配应当做什么