詳解iptables防火墻SNAT、DNAT地址轉換工作原理及使用
NAT是將私有IP地址通過邊界路由轉換成外網IP地址,在邊界路由的NAT地址轉換表中記錄下這個轉換,當數據返回時,路由使用NAT技術查詢NAT轉換表,再將目標地址替換成內網用戶IP地址。
SNAT策略
局域網主機共享單個公網IP地址接入Internet(內網的地址改成公網)
DNAT策略
目標地址轉換
SNAT、DNAT工作原理
SNAT
局域網PC封裝源、目ip(源地址:192.168.100.77,目的地址:172.16.16.101),到達網關路由器,SNAT將源地址轉換成唯一的一個公網ip,此時源地址變成了公網ip172.16.16.254(eth0),再把數據包重新封裝。當外網服務器收到,進行數據回復的時候。源目對調,源地址是web服務器地址,目標地址是網關地址,找到網關路由之後,在網關路由中會有一個狀態記錄(局域網內或許不止一臺主機訪問外網),轉發回去。
DNAT
外網客戶機發送http請求,請求的是公網IP地址(eth0),數據到達網關服務器時,查看訪問是80端口,將目的地址172.16.16.254(公網IP只有一個)改為192.168.100.77。內網服務器收到以後返回數據,使用的是SNAT(通過SNAT原理來解釋)
實驗環境
- 系統環境:CentOS6.5
- 內網IP:192.168.100.77/24
- 公網IP:172.16.16.101/24
- 網關防火墻:
公網網網卡:eth0:172.16.16.254
內網網卡:eth1:192.168.100.254
搭建步驟:
一、準備工作
1、清空防火墻規則、關閉Selinux
[root@Init5 ~]# vim /etc/sysconfig/selinux
[root@Init5 ~]# reboot #重啟
[root@Init5 ~]# /etc/init.d/iptables stop #清空防火墻規則
2、查看網卡信息
[root@Init5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看網關防火墻公網網卡信息
[root@Init5 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 #查看網關防火墻內網網卡信息
[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看公網網卡信息
[root@redhat6 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 #查看內網網卡信息
3、開啟網關防火墻路由功能
[root@Init5 ~]# vim /etc/sysctl.conf #配置一些系統信息以及內核參數
[root@Init5 ~]# sysctl -p #重新加載配置文件
4、測試互聯互通
[root@client ~]# ping -c 3 172.16.16.254 #公網服務器ping公網網關
[root@client ~]# ping -c 3 192.168.100.254 #公網服務器ping內網網關
二、構建SNAT地址轉換
1、網關防火墻設置SNAT規則
[root@Init5 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 172.16.16.254 #將內網192.168.100.0/24網段的IP轉換成公網網關IP172.16.16.254
-t:指定規則表是nat(修改源目IP或端口)
-A:追加規則鏈是POSTROUTING(路由後)
-s:指定源地址
-o:指定出站網卡
-j:指定控制類型
--to-source:指定轉換的源地址
[root@Init5 ~]# iptables -L -t nat -v #查看防火墻規則
2、設置公網服務器
[root@client ~]# yum -y install httpd #安裝web服務
[root@client ~]# vim /etc/httpd/conf/httpd.conf #修改配置文件
ServerName www.bt.com:80 #開啟完整主機名
Listen 172.16.16.101:80 #開啟監聽地址
[root@client ~]# /etc/init.d/httpd start #啟動web服務器
[root@client ~]# tail -f /var/log/httpd/access_log #監視access_log日誌文件的尾部內容
3、內網客戶機訪問公網Web服務器
[root@redhat6 ~]# yum -y install elinks #安裝基於文本的瀏覽器工具
[root@redhat6 ~]# elinks 172.16.16.101 #訪問外網Web服務器
4、查看公網訪問日誌信息
三、構建DNAT地址轉換
1、網關防火墻設置SNAT規則
[root@Init5 ~]# iptables -t nat -A PREROUTING -i eth0 -d 172.16.16.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.77 #將公網客戶機IP 172.16.16.254/24轉換成192.168.100.77/24內網IP
[root@Init5 ~]# iptables -L -t nat -v #查看防火墻規則
2、設置內網服務器
[root@redhat6 ~]# yum -y install httpd #安裝web服務
[root@redhat6 ~]# vim /etc/httpd/conf/httpd.conf #修改配置文件
#修改以下參數
ServerName www.test.com:80 #開啟完整主機名
Listen 192.168.100.77:80 #開啟監聽地址
[root@redhat6 ~]# /etc/init.d/httpd start #啟動web服務器
[root@redhat6 ~]# tail -f /var/log/httpd/access_log #監視access_log日誌文件的尾部內容
3、公網客戶機訪問內網Web服務器
[root@client ~]# elinks 172.16.16.254 #註意訪問的是公網網關IP,通公網網關才可以將地址進行轉換,之前規則也已經寫清楚了
4、查看內網訪問日誌信息
四、公網客戶機通過訪問內網ssh服務實現修改端口
1、網關防火墻設置端口規則
[root@Init5 ~]# iptables -t nat -A PREROUTING -i eth0 -d 172.16.16.254 -p tcp --dport 999 -j DNAT --to-destination 192.168.100.77:22 #註意這裏將ssh服務端口改為999
[root@Init5 ~]# iptables -L -t nat -v #查看防火墻規則
2、公網客戶端訪問內網ssh服務實現遠程連接
[root@client ~]# ssh [email protected] -p 999
詳解iptables防火墻SNAT、DNAT地址轉換工作原理及使用