--Linux IP_FORWARD說明
-----------------------------2014/03/01
ip地址分公有地址和私有地址,public address是由INIC(internet network information center)負責,這些ip地址分配給註冊並向INIC提出申請的組織機構。通過它訪問internet.private address是屬於非註冊地址,專門為組織內部使用,private ip address是不可能直接用來跟WAN通訊的,要麼利用幀來通訊(FRE幀中繼,HDLC,PPP),要麼需要路由的NAT功能把私有地址轉換為一個公有ip!
選擇一臺電腦(有兩個網絡卡或者用單網絡卡然後用軟體虛擬多一個網絡卡)充當閘道器,一個網絡卡(eth0)連線外網ISP,另一網絡卡(eth1)連線內網(即區域網)。區域網內的ip地址都是私用地址,只能在內部使用,在公網上是不可見的,所以區域網電腦要上網必須修改ip,這就是閘道器的工作。
工作原理
內網主機向公網傳送資料包時,由於目的主機跟源主機不在同一網段,所以資料包暫時發往內網預設閘道器處理,而本網段的主機對此資料包不做任何迴應。由於源主機ip是私有的,禁止在公網使用,所以必須將資料包的源傳送地址修改成公網上的可用ip,這就是閘道器收到資料包之後首先要做的工作--ip轉換。然後閘道器再把資料包發往目的主機。目的主機收到資料包之後,只認為這是閘道器傳送的請求,並不知道內網主機的存在,也沒必要知道,目的主機處理完請求,把迴應資訊發還給閘道器。閘道器收到後,將目的主機發還的資料包的目的ip地址修改為發出請求的內網主機的ip地址,並將其發給內網主機。這就是閘道器的第二個工作--資料包的路由轉發。內網的主機只要檢視資料包的目的ip與傳送請求的源主機ip地址相同,就會迴應,這就完成了一次請求。
 
出於安全考慮,Linux系統預設是禁止資料包轉發的。所謂轉發即當主機擁有多於一塊的網絡卡時,其中一塊收到資料包,根據資料包的目的ip地址將包發往本機另一網絡卡,該網絡卡根據路由表繼續傳送資料包。這通常就是路由器所要實現的功能。
配置Linux系統的ip轉發功能,首先保證硬體連通,然後開啟系統的轉發功能
less /proc/sys/net/ipv4/ip_forward,該檔案內容為0,表示禁止資料包轉發,1表示允許,將其修改為1。可使用命令echo "1" > /proc/sys/net/ipv4/ip_forward 修改檔案內容,重啟網路服務或主機後效果不再。若要其自動執行,可將命令echo "1" > /proc/sys/net/ipv4/ip_forward 寫入指令碼/etc/rc.d/rc.local 或者 在/etc/sysconfig/network指令碼中新增 FORWARD_IPV4="YES"