1. 程式人生 > 其它 >計算機網路:基於iptalbes的SANT和DNAT|docker的服務釋出專案

計算機網路:基於iptalbes的SANT和DNAT|docker的服務釋出專案

1.實驗環境

我們需要準備三臺linux系統,一臺作為路由器機route,其它為客戶機client-1client-2

主機改名

hostnamectl set-hostname 主機名

2.網路拓撲圖

3.三臺機器的IP地址配置

進入centos7的網絡卡配置檔案目錄

cd /etc/sysconfig/network-scripts/

route機IP地址配置

ens33:

ens37:

client-1IP地址配置

ens33:

client-2IP地址配置

ens33:

centos7的網絡卡過載命令

ifup 網絡卡名
ifup ens33

配置完後客戶機ping閘道器

成功我們配置完成

ping 192.168.17.254

4.連線到xshell方便操作

管理員身份開啟cmd

新增路由表

route add 192.168.17.0/24 192.168.0.100
        前者為目標網段    後者為下一跳地址,即路由器機的IP地址       

4.開啟route機的路由功能

關閉三臺機器的firewallselinux服務(皆為臨時修改,建議永久修改)

systemctl stop firewalld
setenforce 0

開啟路由功能

echo  1 >/proc/sys/net/ipv4/ip_forward

5.實現SANT策略(區域網主機共享單個公網ip地址接入Internet)

#清除filter表和nat表裡的防火牆規則
iptables -F
iptables -t nat -F

#SNAT策略
#第一種
iptables -t nat -A POSTROUTING  -s 192.168.17.0/24 -o ens33 -j SNAT --to-source 192.168.0.100
#第二種
iptables -t nat -A POSTROUTING -s 192.168.17.0/24 -o ens33 -j MASQUERADE

到這一步我們發現客戶機可以ping通Internet

6.為docker的服務釋出建立環境

開啟docker服務(linux裸機沒有安裝這個docker,需自行安裝)

systemctl start docker

下載映象建立容器並執行

#客戶機1
#我運行了nginx和mysql的容器

docker run --name sc-nginx-1 -d -p 80:80 nginx

#注意需關閉佔用客戶機3306埠的資料庫服務,否則會衝突
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='123' -d -p 3306:3306  mysql:5.7.35
#客戶機2
#這臺機器我們只起mysql的容器

#注意這臺機器把客戶機3307埠對映到容器的3306埠 docker run
--name sc-mysql-2 -e MYSQL_ROOT_PASSWORD='123' -d -p 3307:3306 mysql:5.7.35

7,實現DNAT策略(將內網的伺服器釋出到Internet)

#DNAT策略
#dnat web
iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.17.1:80

#dnat mysql 192.168.17.1
iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.100 -p tcp --dport 3306 -j DNAT --to-destination 192.168.17.1:3306

#dnat mysql 192.168.17.2
iptables -t nat -A PREROUTING -i ens33 -d 192.168.0.100 -p tcp --dport 3307 -j DNAT --to-destination 192.168.17.2:3306

8,在其他的機器上測試釋出的web和MySQL服務,使用curl和chrome,SQLyog的測試工具進行測試