iptables轉發技術


NAT

一. 什么是 NAT

NAT(Network Address Translation)譯為網絡地址轉換。通常路由器在轉發我們的數據包時,僅僅會將源MAC地址換成自己的MAC地址,但是NAT技術可以修改數據包的源地址、目的地址以及源端口、目的端口等信息。

二. NAT的作用

NAT技術最常見的應用就是通過修改源IP地址實現內網多主機使用一個公網地址接入互聯網。NAT技術通常用於端口和流量的轉發、重定向,實現如端口映射、跨網絡訪問、流量代理等功能。

二. iptables實現NAT轉發

1.語法及參數介紹

iptables  [-t TABLE]  COMMAND  CHAIN  [num]  匹配條件  -j  處理動作

要使用iptables的NAT功能,我們首先需要啟用網卡的IP轉發功能

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

如果想要永久生效,我們要編輯/etc/sysctl.conf文件,設置net.ipv4.ip_forward = 1,然后用sysctl -p 命令使配置文件生效。

我們使用-t nat參數指明使用nat表,因為iptables默認使用filter表。
nat表同filter表一樣有三條缺省的"鏈"(chains):

POSTROUTING:定義進行源地址轉換規則,重寫數據包的源IP地址
PREROUTING:定義進行目的地址轉換的規則,可以把外部訪問重定向到其他主機上
OUTPUT:定義對本地產生的數據包的目的轉換規則。

我們要利用iptables進行NAT轉換時,使用的動作主要為SNAT、DNAT和REDIRECT:

SNAT:源地址轉換
DNAT:目的地址轉換
REDIRECT:端口重定向

(1)規則操作

-A:在鏈的尾部添加一條規則
-D CHAIN [num]: 刪除指定鏈中的第num條規則
-I CHAIN [num]:在指定鏈內第num條位置插入一條規則
-R CHAIN [num]: 替換鏈內指定位置的一條規則

(2)源/目的IP地址

-s:指定源地址
--dst:指定目的地址

(3)網絡接口

-i:入站接口。對於`PREROUTING`鏈,只能用-i指定進來的網絡接口
-o:出站接口。對於POSTROUTING和OUTPUT,只能用-o指定出去的網絡接口

(4)動作

 ACCEPT:放行
 DROP:丟棄
 REJECT:拒絕
 MASQUERADE:地址偽裝
 LOG:日志
 MARK:標記

三. 源/目的轉發實例

1.源NAT(SNAT)
更改所有來自192.168.1.0/24的數據包的源IP地址為123.4.5.100

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 123.4.5.100

2.目的NAT(DNAT)
更改所有來自192.168.1.0/24的數據包的目的ip地址為123.4.5.100

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT --to 123.4.5.100

3.IP映射實例
假設有這樣的情況:A、B單位給自內網中部分用戶要求建立自己的Web服務器對外發布信息。我們可以在防火牆的外部網卡上綁定多個合法公網IP地址,然后通過ip映射使發給其中某一個IP地址的包轉發至內部某一用戶的Web服務器上,並將該內部Web服務器的響應包偽裝成該公網IP發出的包。

節點 內網IP 公網IP
A單位Web服務器 192.168.1.100 123.4.5.100
B單位Web服務器 192.168.1.200 123.4.5.200
linux防火牆 192.168.1.1(eth1) 123.4.5.1(eth0)

在進行NAT之前,我們需要先將分配給A、B單位的公網ip綁定到防火牆的外網接口:

ifconfig eth0 add 123.4.5.100 netmask 255.255.255.0
ifconfig eth0 add 123.4.5.200 netmask 255.255.255.0

對防火牆接收到的目的ip為123.4.5.100和123.4.5.200的所有數據包進行目的NAT(DNAT):

iptables -A PREROUTING -i eth0 -d 123.4.5.100 -j DNAT --to 192.168.1.100
iptables -A PREROUTING -i eth0 -d 123.4.5.200 -j DNAT --to 192.168.1.200

其次,對防火牆接收到的源ip地址為192.168.1.100和192.168.1.200的數據包進行源NAT(SNAT):

iptables -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to 123.4.5.100
iptables -A POSTROUTING -o eth0 -s 192.168.1.200 -j SNAT --to 123.4.5.200

這樣,所有目的ip為123.4.5.100和123.4.5.200的數據包都將分別被轉發給192.168.1.100和192.168.1.200;
而所有來自192.168.1.100和192.168.1.200的數據包都將分別被偽裝成由123.4.5.100和123.4.5.200,從而也就實現了ip映射。

iptables -t nat -A PREROUTING -d 公網ip -p tcp --dport 公網端口 -j DNAT --to 內網ip:內網服務端口
iptables -t nat -A POSTROUTING -d 內網ip -p tcp --dport 內網服務端口 -j SNAT --to-source 網關外網IP
節點 內網IP(eth0) 公網IP(eth1)
網關 10.0.0.1 123.4.5.100
內網主機 10.0.0.20

例:把內網ssh服務映射到外網。iptables規則配置如下:

iptables -t nat -A PREROUTING -d 123.4.5.100 -p tcp --dport 2222 -j DNAT --to-destination 10.0.0.20:22
iptables -t nat -A POSTROUTING -d 10.0.0.20 -p tcp --dport 22 -j SNAT --to-source 123.4.5.100

把訪問公網123.4.5.100:2222的數據包轉發到了內網10.0.0.20:22

四.端口轉發實例

1.本機端口轉發

把發往本機80端口的數據重定向到8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

2.遠程端口轉發

把訪問123.4.5.100:8080的數據包轉發到123.4.5.200:80

iptables -t nat -A PREROUTING -d 123.4.5.100 -p tcp --dport 8080 -j DNAT --to-destination 123.4.5.200:80

多網卡問題:iptables學習筆記:端口轉發命令優化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM