標籤:nat iptables
機房內網伺服器無外網IP上不了網怎麼辦?
比如,機房有A B 兩台伺服器,A有外網IP地址,B沒有外網IP地址,那B如何上網呢?
思路就是,把B的網關指向A伺服器的內網地址,通過A伺服器代理上網
iptables的進階應用程式 共用上網
舉例如下:
閘道伺服器B:
ech0 10.0.0.51 外網地址 配上級網關
ech1 172.16.1.51 內網地址 不配網關
內網伺服器C:
ech1 172.16.1.52 網關172.16.1.51
閘道伺服器B需要具備的條件
1 物理條件是雙網卡,一塊內網地址,一塊外網地址
2 確保伺服器網關B可以上網
3 核心檔案/etc/sysctl.conf要開啟轉寄功能
net.ipv4.ip_forward = 1
sysctl -p #使修改生效
4 iptables 的filter表的forward鏈允許轉寄
閘道伺服器的IPTABLES預設規則最好是ACCEPT
伺服器C需要具備的條件
1 伺服器C的預設閘道是伺服器B的內網地址
route -n
route del default gw 172.16.1.8
route -n
route add default gw 172.16.1.51
在閘道伺服器B上配一條規則允許伺服器C上網
閘道伺服器B
1 載入核心模組
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
2 區域網路共用的兩條命令方法:
(實現原理把伺服器C的內網地址轉換成閘道伺服器的外網地址,相當於是資料包到達網關B,再從B發出 ,好像資料包是B發出去的一樣)
方法1 :適合於有固定外網地址的:
iptables -t nat -A POSTROUTING -s 172.16.1.52 -o eth0 -j SNAT -to-source 10.0.0.51
-A POSTROUTING 因為是離開防火牆去網關B伺服器,所以用 POSTROUTING鏈
-s 172.16.1.52 伺服器C的內網IP地址,可以改成網段 -s 172.16.1.0/24
-o eth0 閘道伺服器B的外網卡介面/可寫可不寫
-j SNAT -to-source 10.0.0.51 源地址轉換成閘道伺服器B的外網卡IP地址
ping 203.81.19.1 測一下
方法2:適合變化的外網地址(ADSL)
iptables -t nat -A POSTROUTING -s 172.16.1.52 -j MASQUERADE (偽裝)
我用語言來描述一下這個過程:
假設伺服器C172.10.1.52 要訪問百度1.1.1.1(假設的地址) ;先是ARP內網廣播,沒人響應後去找網關,到了網關後,因為做了源地址轉換,把伺服器C的內網地址換成了閘道伺服器的外網卡地址,這樣,閘道伺服器的外網卡地址就能找到百度的1.1.1.1,這樣,伺服器C就能上網了
位址解析通訊協定,即ARP(Address Resolution Protocol),是根據IP地址擷取物理地址的一個TCP/IP協議。主機發送資訊時將包含目標IP地址的ARP請求廣播到網路上的所有主機,並接收返回訊息,以此確定目標的物理地址。
有個疑問,包是出去了,那包回來是怎麼找到伺服器C的呢?
本文出自 “青春鄧勇” 部落格,請務必保留此出處http://dengyong.blog.51cto.com/8409869/1853420
iptables 共用上網 (NAT表的使用)