Linux做爲路由器(一)

前言:Linux主機能夠做爲路由器使用,利用路由轉發功能實現不一樣網絡內的主機可以相互通訊,利用iptables的SNAT功能來實現企業內網主機訪問互聯網,下面作個小的實驗。bash

實驗環境:VM網絡

(1)路由器Linux主機router:3d

通常來講須要兩塊網卡:eth0 192.168.31.168  eth1 172.16.100.1  其中eth0使用橋接,eth1使用僅主機模式,這裏我想你有必要了解VM三種網絡模式的區別。router

(2)企業內網主機host1:blog

僅主機模式,eth0 172.16.100.6ip

(3)其餘網段主機host2:路由

橋接模式:eth0 192.168.31.167table

(4)真正可以訪問互聯網的路由器MI_router,地址:192.168.31.1和一個撥號得來的公網地址xxx.xxx.xxx.xxx。class

 

一、首先實現hosts1和host2可以互相訪問route

(1)host1添加默認路由:

# route add default gw 172.16.100.1

使其指向router eth1

(2)host2添加默認路由:

# route add default gw 192.168.31.168

使其指向router eth0,方法同上

(3)router打開路由轉發功能:

查看路由轉發功能是否打開:# cat /proc/sys/net/ipv4/ip_forward  結果是0,則沒有打開

臨時打開方法:echo 1 > /proc/sys/net/ipv4/ip_forward

永久打開方法:修改/etc/sysctl.conf文件,net.ipv4.ip_forward = 1,而後執行sysctl -p

(4)檢驗是否可以互相訪問:

這裏咱們就實現了內部不一樣網絡內主機的通訊。

二、實現host1訪問互聯網:

由於實驗環境router默認網關指向了MI_router 192.168.31.1,因此router能夠訪問互聯網,host2自己是橋接模式,網關指向router,router打開了路由轉發功能,因此host2也能夠訪問互聯網。

雖然host1網關也指向router,能夠訪問到MI_router網關,可是host1確沒法訪問互聯網;

host1的請求能出去,可是不能接收到報文,MI_router沒法將互聯網返回的報文送達host1,緣由以下:

  源地址172.16.100.6通過router轉發,到達MI_router,MI_router進行SNAT,使得請求報文可以在互聯網傳送;

  被請求主機返回數據,MI_router再自動進行DNAT,發現源地址是172.16.100.6,MI_router就蒙圈了,他找不到這臺主機;

  因此要解決的問題是怎麼讓MI_router返回數據給host1;

(1)MI_router咱們沒法修改其網關使其指向router,但MI_router能訪問router這臺主機,那能不能讓MI_router認爲源地址請求是從router發出的呢,答案是能夠的;

   這就涉及到咱們真正看的見得SNAT,固然,MI_router自己就已經實現了SNAT,這裏咱們本身手動實現,將host1的請求轉化爲router的請求,發送給MI_router

(2)在router上添加一條規則就能夠搞定:

# iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to 192.168.31.168

在nat表的POSTROUTING鏈上添加規則,全部來自172.16.0.0/16網絡的主機請求,地址都被轉換爲192.168.31.168,192.168.31.168能訪問互聯網,數據報文返回到router時,它會自動進行DNAT,最終將數據返回給host1主機。

其實這個環境內,host1訪問互聯網通過了兩次SNAT,到這裏咱們就實現了:內網地址經過SNAT實現訪問互聯網。

 可是,你會發現,host1訪問host2也會進行源地址轉換,這不是咱們想要的,ping請求爲例:

host1:ping 192.168.31.167

在host2抓包會發現,是192.168.31.168在進行ICMP請求:

那麼怎麼調整呢,修改咱們的SNAT規則便可:

# iptables -t nat -R POSTROUTING 1 -s 172.16.0.0/16 ! -d 192.168.31.0/24 -j SNAT --to 192.168.31.168

 再次ping,抓包,OK,正常。

咱們能夠根據本身的需求更加精準的進行SNAT。

 

總結:Linux主機實現路由器部分功能

  (1)路由轉發:需打開路由轉發功能/proc/sys/net/ipv4/ip_forward爲1

  (2)SNAT(源網絡地址轉換):iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to 192.168.31.168:

相關文章
相關標籤/搜索