Linux雙網卡搭建NAT服務器

一、需求
學習Linux網絡部分,關鍵還是在理解的基礎上實踐。要實踐,就要準備好自己的環境。
譬如,我是想寫一個小程序,實現一個hook函數,在FORWARD點上對來往的數據包進行監控和過濾等功能。那麼,所需的環境見第二部分介紹。
二、環境
要實現這個功能,個人準備的環境如下:
(1)一個Linux系統主機,雙網卡,實現轉發功能。其中網卡eth0可以上外網,eth1鏈接內網。
(2)一個內網客戶端主機,Linux/Windows都行;
(3)一個交換機,用於實現內網客戶主機和Linux主機的通信。
三、配置
(一)網絡結構
由第二部分介紹的環境可以看出,Linux系統主機主要是實現轉發功能,讓內網主機可以成功的訪問外網。
因此, 首先介紹一下Linux系統主機的配置。Linux主機是可以直接通過eth0上外網的。eth0的IP地址,GW和DNS都是自動獲取的。當然,如果是手動分配IP、GW和DNS也是沒問題的。我的eth0配置如下:
IP: 192.168.79.129/24
GW: 192.168.79.1
DNS:192.168.79.2
Linux主機的eth1指向內網,IP地址爲:10.50.10.1/24。內網主機的內網主機的IP地址就是10.50.10.0/24段的IP,eth1的IP是所有內網主機的網關。這裏,我的內網主機設置如下:
IP: 10.50.10.46/24
GW: 10.50.10.1
DNS:192.168.79.2
這裏,所有內網主機的網關都設置爲eth1的IP地址,而DNS設置爲eth1所在的Linux系統主機的DNS,即192.168.79.2。
以上配置對應的網絡結構圖如下所示:

(二)啓用轉發功能
       以上配置完成後,Host A應該可以ping通Linux系統主機的eth1的IP,因爲他們是通過交換機鏈接的。但是,Host A應該可以ping不通Linux系統主機的eth0的IP,應爲並未開啓Linux系統主機的轉發功能。
       開啓Linux的轉發功能,執行如下命令:
       # echo 1 > /proc/sys/net/ipv4/ip_forward
       查看系統是否啓用了轉發功能,可以執行如下命令:
# cat /proc/sys/net/ipv4/ip_forward
如果結果爲1,代表已啓用,0代表未啓用。
此時,執行ping 192.168.72.129 以及其網關和DNS都可ping通了。
(三)配置NAT規則
       經過第二部分配置後,雖然可以ping相關的IP地址,但是內網主機還是無法上網。問題在於內網主機的IP地址是無法在公網上路由的。因此,需要轉換成Linux系統主機可以上網的IP(注:這裏我們只說不說是公網IP,是因爲Linux系統可以直接上外網的IP同樣是內網IP。但是該內網IP(192.168.79.129)已經通過一些機制,實際上同樣是NAT的方式,可以訪問外網了,因此我們只需將Host A的IP轉換成Linux系統eth0接口的IP即可)。
       我們配置的NAT爲源NAT轉換:
#iptables -t nat -A POSTROUTING -s 10.50.10.0/24
-o eth0 -j MASQUERADE
也可以通過使用SNAT target實現:
#iptables -t nat -A POSTROUTING -s 10.50.10.0/24
-o eth0 -j SNAT --to-source 192.168.79.129
至於MASQUERADE和SNAT的區別,可以網上搜索,有相關的解釋。
同時,還要在FORWARD點出配置規則如下:
#iptables -A FORWARD -i eth1 -j ACCEPT
保證所有進入eth1的包都被FORWARD點ACCEPT。

經過以上的配置之後,Host A就可以正常的訪問外網了。
四、如果只有一臺主機...
       按照上面介紹的環境,邏輯上需要兩臺主機方可實現。如果我只有一臺電腦的話,如何實現搭建NAT服務器,並且通過內網主機訪問外網來驗證配置的結果呢?
       很明顯,虛擬機給我們提供的解決方案。不過仍然需要兩個前提:其一,電腦雙網卡;其二,有一個交換機。
說一些我自己的環境,一臺筆記本,普通網卡+無線網卡,一個交換機。本身筆記本上安裝的是Windows操作系統。上網使用無線網卡,DHCP獲得IP,網關和DNS。但是這個系統僅作爲宿主機,Linux和內網主機都安裝使用虛擬機操作系統。
(1) Linux系統主機
       安裝一個Linux系統的虛擬機,兩張網卡都啓用,其中對應無線網卡的是eth0,採用的上網方式是VMnet8(nat),其實相當於VMware實現了DHCP服務器,將Linux虛擬系統的eth0通過宿主機的無線網卡上網。這就是eth0可以上網的原因。但是我們可以不用關心eth0如何上網的,只要eth0可以上網,我們就可以開始搭建NAT服務器的配置了。
       eth1對應普通網卡,IP地址的配置參考上面的拓撲圖即可。
(2)內網主機
       安裝一個Windows操作系統的虛擬機,僅啓用一張網卡,對應於宿主機的普通網卡。這樣,內網主機上網就只能通過該網卡實現。該網卡的配置同樣參考上面的拓撲圖。
       這樣,我就可以在一臺電腦上,使用內網主機,通過Linux主機的NAT轉換功能,訪問外網了。
       因此,按照這種方式實現之後,想在Linux的FORWARD點驗證你的想法,加一個hook函數就可以了。
五、參考鏈接
1.
http://blog.chinaunix.net/u/16255/showart_100254.html
2.
http://panpan.blog.51cto.com/489034/189072
3.
http://www.howtoforge.com/nat_iptables
4. iptables中SNAT和MASQUERADE的區別:

http://server.zdnet.com.cn/server/2008/0317/772069.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章