名词解释:
Iptables: Linux内核集成的IP信息包过滤系统
SNAT: Source Network Address Translation,源地址转换
DNAT: Destination Network Address Translation, 目的地址转换
项目环境:centos8,docker20.10.8,MySQL,nginx,iptables3台服务器
项目描述:实现内网服务器上网,并且采取docker容器技术构建web以及MySQL应用,该项目模拟了企业的环境实现发布企业内网的服务器。
项目步骤:
1、规划整个项目的拓扑结构以及ip地址
2、安装3台服务器的系统,根据拓扑图的规划配置ip地址,并且安装好docker软件(以client1作为示范)注意:不管是服务器还是firewall都必须用桥接模式
1)Firewall的ip地址配置:
Ens33端口:
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.0.108"
PREFIX="24"
GATEWAY=192.168.0.1
DNS1=114.114.114.114
Ens37端口:
BOOTPROTO="none"
NAME="ens37"
DEVICE="ens37"
ONBOOT="yes"
IPADDR="192.168.160.254"
PREFIX="24"
最后使用ifup ens33以及ifup ens37刷新网络服务
2)Client1的ip配置:
Ens33端口:
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.160.1"
PREFIX="24"
GATEWAY=192.168.160.254
DNS1=114.114.114.114
3、在网关服务器上实现SNAT让内网的服务器可以上网,需要内网的服务器配置好ip和网关,dns
具体步骤:可使用shell脚本实现:
#!/bin/bash
#stop firewalld selinux(关闭防火墙以及selinux)
service firewalld stop
setenforce 0
#open routing(开启路由)
echo 1 >/proc/sys/net/ipv4/ip_forward
#clear iptables rules(清空原本的iptables的命令)
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
#SNAT policy(新增新的iptables政策)
iptables -t nat -A POSTROUTING -s 192.168.160.0/24 -o ens33 -j MASQUERADE
4、在内网服务器上启动nginx和MySQL的docker容器,测试容器是否能正常访问
具体步骤:
1)docker run -d --name nginx-1 -p 80:80 nginx 创建nginx容器指定端口号为80
2)docker run -d --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD="sc123456" -p 3306:3306 mysql:5.7.35 创建MySQL容器指定端口号为3306
5、在网关服务器上编写脚本去配置好DNAT策略,开启路由功能
具体步骤:在步骤3脚本的基础上再加入下述内容:
#DNAT policy web
iptables -t nat -A PREROUTING -d 192.168.0.108 -p tcp --dport 80 -j DNAT --to-destination 192.168.160.1:80
iptables -t nat -A PREROUTING -d 192.168.0.108 -p tcp --dport 3306 -j DNAT --to-destination 192.168.160.1:3306
6、在其他的机器上测试发布的web和MySQL服务,使用curl和chrome,SQLyog的测试工具进行测试
项目总结:
- 如果想要把这个项目顺利完整的做出来,需要对各个步骤做到心里有数,所以第一步至关重要,最好能够把图完整的画出来,并且要熟悉项目中所需要的linux命令,
- 将iptables以及docker容器的原理融入到实验中,加深了对原理的理解,并且锻炼了trouble shooting的能力,