linux iptables 實現單網卡單端口轉發

轉自html

***linux/iptablesshixiandanwangkaduankouzhuanfa_79492_1362921069.htmllinux

iptables是集成與Linux內核 IP 信息包過濾系統,iptables除了是一個強大的防火牆之外,它還以實現NAT,藉助於iptables的幫助,一臺普通的linux主機均可以做爲簡單的路由器服務器

通常而言,iptables中的NAT分爲SNATDNATSNAT是源地址轉換,DNAT是目的地址轉換,SNAT較多的用於共享上網,DNAT較多用於端口轉發less

網上不少的關於SNATDNAT的使用和例子,可是,這些例子都有一個共同的條件:主機擁有兩張或多張網卡,那麼,若是主機只有一張網卡勒?ssh

如下面的例子爲例 :tcp

wps5D8E.tmp

 

如今面臨的問題是:

1. 服務器A可以被公網訪問,可是服務器B不能被公網訪問,服務器B不能被公網訪問,可是能夠被服務器A訪問ide

2. 服務器A只有一張網卡,服務器B也一樣只有一張網卡spa

3.服務器A並非服務器B的網關代理

這裏咱們假設服務器A的系統是Linux,而且安裝了iptables,那麼若是才能藉助於iptables實現外網訪問服務器B的資源(好比服務器B是一個http服務器)勒?(這種狀況常見於高校校內資源訪問和部分的企業內部資源訪問)htm

首先咱們要知道,服務器A只有一張網卡,那麼傳統的端口轉發還不夠,須要額外的配置 

1. 配置端口轉發:

咱們使用服務器A的端口8080來轉發到服務器B80 端口:

sudo iptables -t nat -p tcp -A PREROUTING --dport 8080 -i eth0 -j \DNAT --to 211.211.211.2:80 #這裏的地址和端口根據實際狀況而定

 

2.配置源地址轉換 :

當服務器B將應答數據發送給B時,因爲是服務器B在應答,所以在數據路由後送出端口以前,咱們須要修改原始的地址,由於服務器B的地址是不可被公網訪問的,而服務器A能夠被公網訪問 :

sudo iptables -A POSTROUTING -t nat -p tcp --sport 80 -s 211.211.211.2 -j \SNAT --to 211.211.211.1

可是,這裏存在一點問題,爲何服務器B要把應答包往A發送勒?服務器A發送的包中的原始地址又不是服務器A的地址,所以,咱們須要在轉發包路由後修改包的源IP地址爲服務器Aip地址,這樣,服務器A就會將應答包發送給AA又將應答包轉發給遠端的用戶,

3.修改轉發包的源IP地址

實現的命令以下:

sudo iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 211.211.211.2 -j \SNAT --to 211.211.211.1

須要注意的一點是:只要代理轉發服務器不是目的服務器的網關,或者目的服務器沒有將代理轉發服務器設置爲網關,那麼都須要第三步才能實現端口轉發

那麼,藉助於iptables,在單網卡狀況下咱們也能夠實現端口轉發了

咱們也能夠實現端口轉發了。

相關文章
相關標籤/搜索