iptables轉發技術

NAT

一. 什麼是 NAT

NAT(Network Address Translation)譯爲網絡地址轉換。一般路由器在轉發咱們的數據包時,僅僅會將源MAC地址換成本身的MAC地址,可是NAT技術能夠修改數據包的源地址、目的地址以及源端口、目的端口等信息。linux

二. NAT的做用

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

二. 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):ssh

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

咱們要利用iptables進行NAT轉換時,使用的動做主要爲SNAT、DNAT和REDIRECT:tcp

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

(1)規則操做學習

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

(2)源/目的IP地址優化

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

(3)網絡接口.net

-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學習筆記:端口轉發命令優化

相關文章
相關標籤/搜索