歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> iptables中NAT表

iptables中NAT表

日期:2017/2/28 13:49:37   编辑:Linux教程

iptables是我們在實際生產環境中大量的使用的工具,它能對進出主機的數據進行過濾以及轉發等等,我們在平時用的比較多的就是iptables的net表和filter表,在這裡就簡要的講解下iptables的nat表,來實現主機上的路由轉發,如果對iptables還不是很了解的可以上網去搜索會有很多詳細的資料。

nat表是對進出主機的ip或端口進行轉發,在這裡必須要知道的是在linux系統中ip地址並不屬於某一張網卡的,而是屬於linux主機的內核的所以在linux系統裡ip是可以轉換的,其實在我們平時用的路由器或者是刷的軟路由都是基於linux的iptables來實現的,在使用iptables的nat表之前需要開啟內核ip地址轉發的功能
[root@test ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
#或者是直接vim編輯把net.ipv4.ip_forward=0改成1
然後再使之生效
[root@test ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

在其中呢我們會用到3種狀態MASQUERADE、DNAT、SNAT和3條鏈PREROUTING,POSTROTING,OUTPUT。
我們將我們內網的地址轉換為一個外網的IP時有2中方式要用在POSTROUTING鏈上,其中MASQUERADE是源地址偽裝,一般用在ADSL動態上網的環境中把做地址轉發,他會自動識別內核中的地址,但是如果你是用靜態ip或者是某一個內網中的ip做轉發盡量不要用這種方式,以節省系統開銷
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
#這裡就是把10.8.0.0/24網段的ip動態識別eth0網卡上的地址轉發出去
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.168.253
#這一條的意思是把10.8.0.0/24網段的ip通過eth0都轉發成192.168.168.253

要注意的是如果用SNAT轉發出去的話就必須用--to-source ip給轉發出去。
以上2種的都是ip地址由內到外的轉發,如果在一個公網1.1.1.1中的局域網裡的一個內網172.32.0.0/24中的172.32.0.1要訪問10.8.0.0/24網段中的10.8.0.1那我們就要在PREROUTING鏈上做DNAT了,當然要在1.1.1.1的局域網內先做好SNAT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 172.32.0.1 -o ehth0 -j SNAT --to-source 1.1.1.1

192.168.168.0/24的局域網內做DNAT,當然filter表中的如口也要做好還要做好其中的forward鏈
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.168.253 -i ehh0 -j DNAT --to-destination 10.8.0.1
#把到192.168.168.253轉發成10.8.0.1

這樣172.32.0.0/24網段中的172.32.0.1就可以訪問10.8.0.0/24網段中的10.8.0.1了,要注意的是在DNAT中是可以限制tcp或者是udp的某一個端口的進出的,如果是只讓172.32.0.0/24網段中的172.32.0.1訪問10.8.0.0/24網段中的10.8.0.1的http服務那就只開放80端口
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.168.253 -i ehh0 -p tcp --dport 80 -j DNAT --to-destination 10.8.0.1

或者是我要把10.8.0.0/24網段中的10.8.0.1的http服務端口映射出去不用標准端口,如8080就
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -d 192.168.168.253 -i ehh0 -p tcp --dport 8080 -j DNAT --to-destination 10.8.0.1:80

所以在DNAT中是支持端口映射的,這樣就可以實現內網中的DZM區和非DZN區的保護

Copyright © Linux教程網 All Rights Reserved