1. 程式人生 > >詳解iptables防火墻SNAT、DNAT地址轉換工作原理及使用

詳解iptables防火墻SNAT、DNAT地址轉換工作原理及使用

路由器 信息 nat nat技術 成了 客戶端 目標地址 init5 ima

NAT簡介

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地址轉換工作原理及使用