什么是路由器架設(shè)
什么是路由器架設(shè)
本文是小編帶來什么是路由器架設(shè),歡迎大家閱讀。
我們知道在區(qū)域網(wǎng)路里面的主機(jī)可以透過廣播的方式來進(jìn)行網(wǎng)路封包的傳送,但在不同網(wǎng)段內(nèi)的主機(jī)想要互相連線時(shí),就得要透過路由器了。 那么什么是路由器?他的主要功能是什么?下面我們就來學(xué)習(xí)啦!
什么是路由器與 IP 分享器
既然主機(jī)想要將資料傳送到不同的網(wǎng)域時(shí)得透過路由器的幫忙,所以啦,路由器的主要功能就是:『轉(zhuǎn)遞網(wǎng)路封包』咯!也就是說,路由器會(huì)分析來源端封包的 IP 表頭,在表頭內(nèi)找出要送達(dá)的目標(biāo) IP 后,透過路由器本身的路由表 (routing table) 來將這個(gè)封包向下一個(gè)目標(biāo) (next hop) 傳送。這就是路由器的功能。 那么路由器的功能可以如何達(dá)成呢?目前有兩種方法可以達(dá)成:
* 硬體功能:例如 Cisco, TP-Link, D-Link (註2) 等公司都有生產(chǎn)硬體路由器, 這些路由器內(nèi)有嵌入式的作業(yè)系統(tǒng),可以負(fù)責(zé)不同網(wǎng)域間的封包轉(zhuǎn)譯與轉(zhuǎn)遞等功能;
* 軟體功能:例如 Linux 這個(gè)作業(yè)系統(tǒng)的核心就有提供封包轉(zhuǎn)遞的能力。
高階的路由器可以連結(jié)不同的硬體設(shè)備,并且可以轉(zhuǎn)譯很多不同的封包格式,通常價(jià)格也不便宜啊! 在這個(gè)章節(jié)里面,我們并沒有要探討這么高階的問題,僅討論在乙太網(wǎng)路里頭最簡單的路由器功能: 連接兩個(gè)不同的網(wǎng)域。嘿嘿!這個(gè)功能 Linux 個(gè)人電腦就可以達(dá)成了!那怎么達(dá)成呢?
打開核心的封包轉(zhuǎn)遞 (IP forward) 功能
就如同路由表是由 Linux 的核心功能所提供的,這個(gè)轉(zhuǎn)遞封包的能力也是 Linux 核心所提供, 那如何觀察核心是否已經(jīng)有啟動(dòng)封包轉(zhuǎn)遞呢?很簡單啊,觀察核心功能的顯示檔案即可,如下所示:
[root@www ~]# cat /proc/sys/net/ipv4/ip_forward
0 <== 0 代表沒有啟動(dòng), 1 代表啟動(dòng)了
要讓該檔案的內(nèi)容變成啟動(dòng)值 1 最簡單的方是就是使用:『echo 1 > /proc/sys/net/ipv4/ip_forward』即可。 不過,這個(gè)設(shè)定結(jié)果在下次重新開機(jī)后就會(huì)失效。因此,鳥哥建議您直接修改系統(tǒng)設(shè)定檔的內(nèi)容,那就是 /etc/sysctl.conf 來達(dá)成開機(jī)啟動(dòng)封包轉(zhuǎn)遞的功能喔。
[root@www ~]# vim /etc/sysctl.conf
# 將底下這個(gè)設(shè)定值修改正確即可! (本來值為 0 ,將它改為 1 即可)
net.ipv4.ip_forward = 1
[root@www ~]# sysctl -p <==立刻讓該設(shè)定生效
sysctl 這個(gè)指令是在核心工作時(shí)用來直接修改核心參數(shù)的一個(gè)指令,更多的功能可以參考 man sysctl 查詢。 不要懷疑!只要這個(gè)動(dòng)作,你的 Linux 就具有最簡單的路由器功能了。而由于 Linux 路由器的路由表設(shè)定方法的不同,通常路由器規(guī)劃其路由的方式就有兩種:
* 靜態(tài)路由:直接以類似 route 這個(gè)指令來直接設(shè)定路由表到核心功能當(dāng)中,設(shè)定值只要與網(wǎng)域環(huán)境相符即可。 不過,當(dāng)你的網(wǎng)域有變化時(shí),路由器就得要重新設(shè)定;
* 動(dòng)態(tài)路由:透過類似 Quagga 或 zebra 軟體的功能,這些軟體可以安裝在 Linux 路由器上, 而這些軟體可以動(dòng)態(tài)的偵測網(wǎng)域的變化,并直接修改 Linux 核心的路由表資訊, 你無須手動(dòng)以 route 來修改你的路由表資訊喔!
了解了路由器之后,接下來你可能需要了解到什么是 NAT (Network Address Translation, 網(wǎng)路位址轉(zhuǎn)譯) 伺服器, NAT 是啥?其實(shí) IP 分享器就是最簡單的 NAT 伺服器啦!嘿嘿,了解了嗎?沒錯(cuò), NAT 可以達(dá)成 IP 分享的功能, 而 NAT 本身就是一個(gè)路由器,只是 NAT 比路由器多了一個(gè)『 IP 轉(zhuǎn)換』的功能。怎么說呢?
一般來說,路由器會(huì)有兩個(gè)網(wǎng)路介面,透過路由器本身的 IP 轉(zhuǎn)遞功能讓兩個(gè)網(wǎng)域可以互相溝通網(wǎng)路封包。 那如果兩個(gè)介面一邊是公共 IP (public IP) 但一邊是私有 IP (private IP) 呢? 由于私有 IP 不能直接與公共 IP 溝通其路由資訊,此時(shí)就得要額外的『 IP 轉(zhuǎn)譯』功能了;
Linux 的 NAT 伺服器可以透過修改封包的 IP 表頭資料之來源或目標(biāo) IP ,讓來自私有 IP 的封包可以轉(zhuǎn)成 NAT 伺服器的公共 IP ,就可以連上 Internet !
所以說,當(dāng)路由器兩端的網(wǎng)域分別是 Public 與 Private IP 時(shí),才需要 NAT 的功能! NAT 功能我們會(huì)在下一章防火墻時(shí)談及, 這個(gè)章節(jié)僅談?wù)撘幌侣酚善鞫寻? ^_^
何時(shí)需要路由器
一般來說,電腦數(shù)量小于數(shù)十部的小型企業(yè)是無須路由器的,只需要利用 hub/switch 串接各部電腦, 然后透過單一線路連接到 Internet 上即可。不過,如果是超過數(shù)百部電腦的大型企業(yè)環(huán)境, 由于他們的環(huán)境通常需要考慮如下的狀況,因此才需要路由器的架設(shè):
* 實(shí)體線路之布線及效能的考量:
在一棟大樓的不同樓層要串接所有的電腦可能有點(diǎn)難度,那可以透過每個(gè)樓層架設(shè)一部路由器, 并將每個(gè)樓層路由器相連接,就能夠簡單的管理各樓層的網(wǎng)路; 此外,如果各樓層不想架設(shè)路由器,而是直接以網(wǎng)路線串接各樓層的 hub/switch 時(shí), 那由于同一網(wǎng)域的資料是透過廣播來傳遞的,那當(dāng)整個(gè)大樓的某一部電腦在廣播時(shí), 所有的電腦將會(huì)予以回應(yīng),哇!會(huì)造成大樓內(nèi)網(wǎng)路效能的問題;所以架設(shè)路由器將實(shí)體線路分隔, 就有助于這方面的網(wǎng)路效能。
* 部門獨(dú)立與保護(hù)資料的考量:
在閱讀過網(wǎng)路基礎(chǔ)后,你就會(huì)曉得, 只要實(shí)體線路是連接在一起的,那么當(dāng)資料透過廣播時(shí),你就可以透過類似 tcpdump 的指令來監(jiān)聽封包資料, 并且予以竊取~所以,如果你的部門之間的資料可能需要獨(dú)立, 或者是某些重要的資料必須要在公司內(nèi)部也予以保護(hù)時(shí),可以將那些重要的電腦放到一個(gè)獨(dú)立的實(shí)體網(wǎng)域, 并額外加設(shè)防火墻、路由器等連接上公司內(nèi)部的網(wǎng)域。
路由器就只是一個(gè)設(shè)備,要如何使用端看你的網(wǎng)路環(huán)境的規(guī)劃!上面僅是舉出一些應(yīng)用案例。 底下我們先就架設(shè)一個(gè)靜態(tài)路由的路由器來玩一玩吧!
靜態(tài)路由之路由器
假設(shè)在貴公司的網(wǎng)路環(huán)境當(dāng)中,除了一般職員的工作用電腦是直接連接到對外的路由器來連結(jié)網(wǎng)際網(wǎng)路, 在內(nèi)部其實(shí)還有一個(gè)部門需要較安全的獨(dú)立環(huán)境,因此這部份的網(wǎng)路規(guī)劃可能是這樣的情況 :
靜態(tài)路由之路由器架構(gòu)示意圖
以上圖的架構(gòu)來說,這家公司主要有兩個(gè) class C 的網(wǎng)段,分別是:
一般區(qū)網(wǎng)(192.168.1.0/24) :包括 Router A, workstation 以及 Linux Router 三部主機(jī)所構(gòu)成;
保護(hù)內(nèi)網(wǎng)(192.168.100.0/24):包括 Linux Router, clientlinux, winxp, win7 等主機(jī)所構(gòu)成。
其中 192.168.1.0/24 是用來做為一般員工連接網(wǎng)際網(wǎng)路用的,至于 192.168.100.0/24 則是給特殊的部門用的。workstation 代表的是一般員工的電腦,clientlinux 及 winxp, win7 則是特殊部門的工作用電腦, Linux Router 則是這個(gè)特殊部門用來連接到公司內(nèi)部網(wǎng)域的路由器。在這樣的架構(gòu)下, 該特殊部門的封包就能夠與公司其他部門作實(shí)體的分隔了。
由上圖你也不難發(fā)現(xiàn),只要是具有路由器功能的設(shè)備 (Router A, Linux Router) 都會(huì)具有兩個(gè)以上的介面, 分別用來溝通不同的網(wǎng)域,同時(shí)該路由器也都會(huì)具有一個(gè)預(yù)設(shè)路由啊! ^_^! 另外,你還可以加上一些防火墻的軟體在 Linux Router 上,以保護(hù) clientlinux, winxp, win7 呢!
那我們先來探討一下連線的機(jī)制好了,先從 clientlinux 這部電腦談起。如果 clientlinux 想要連上 Internet,那么他的連線情況會(huì)是如何?
發(fā)起連線需求:clientlinux --> Linux Router --> Router A --> Internet
回應(yīng)連線需求:Internet --> Router A --> Linux Router --> clientlinux
觀察一下兩部 Router 的設(shè)定,要達(dá)到上述功能,則 Router A 必須要有兩個(gè)介面,一個(gè)是對外的 Public IP 一個(gè)則是對內(nèi)的 Private IP ,因?yàn)?IP 的類別不同,因此 Router A 還需要額外增加 NAT 這個(gè)機(jī)制才行,這個(gè)機(jī)制我們在后續(xù)章節(jié)會(huì)繼續(xù)談到。 除此之外,Router A 并不需要什么額外的設(shè)定。至于 Linux Router 就更簡單了!什么事都不用作,將兩個(gè)網(wǎng)路介面卡設(shè)定兩個(gè) IP , 并且啟動(dòng)核心的封包轉(zhuǎn)遞功能,立刻就架設(shè)完畢了!非常簡單!我們就來談一談這幾個(gè)機(jī)器的設(shè)定吧!
Linux Router
在這部主機(jī)內(nèi)需要有兩張網(wǎng)卡,鳥哥在這里將他定義為 (假設(shè)你已經(jīng)將剛剛實(shí)作的 eth0:0 取消掉了):
eth0: 192.168.1.100/24
eth1: 192.168.100.254/24
# 1. 再看看 eth0 的設(shè)定吧:
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="08:00:27:71:85:BD"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=none
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.254 <==最重要的設(shè)定啊!透過這部主機(jī)連出去的!
# 2. 再處理 eth1 這張之前一直都沒有驅(qū)動(dòng)的網(wǎng)路卡吧!
[root@www ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
HWADDR="08:00:27:2A:30:14"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR=192.168.100.254
NETMASK=255.255.255.0
# 3. 啟動(dòng) IP 轉(zhuǎn)遞,真的來實(shí)作成功才行!
[root@www ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 找到上述的設(shè)定值,將預(yù)設(shè)值 0 改為上述的 1 即可!儲存后離開去!
[root@www ~]# sysctl -p
[root@www ~]# cat /proc/sys/net/ipv4/ip_forward
1 <==這就是重點(diǎn)!要是 1 才可以呦!
# 4. 重新啟動(dòng)網(wǎng)路,并且觀察路由與 ping Router A
[root@www ~]# /etc/init.d/network restart
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
# 上面的重點(diǎn)在于最后面那個(gè)路由器的設(shè)定是否正確喲!
[root@www ~]# ping -c 2 192.168.1.254
PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.
64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=0.294 ms
64 bytes from 192.168.1.254: icmp_seq=2 ttl=64 time=0.119 ms <==有回應(yīng)即可
# 5. 暫時(shí)關(guān)閉防火墻!這一步也很重要喔!
[root@www ~]# /etc/init.d/iptables stop
有夠簡單吧!而且透過最后的 ping 我們也知道 Linux Router 可以連上 Router A 啰!這樣你的 Linux Router 就 OK 了吶!此外,CentOS 6.x 預(yù)設(shè)的防火墻規(guī)則會(huì)將來自不同網(wǎng)卡的溝通封包剔除,所以還得要暫時(shí)關(guān)閉防火墻才行。 接下來則是要設(shè)定 clientlinux 這個(gè)被保護(hù)的內(nèi)部主機(jī)網(wǎng)路咯。
受保護(hù)的網(wǎng)域,以 clientlinux 為例
不論你的 clientlinux 是哪一種作業(yè)系統(tǒng),你的環(huán)境都應(yīng)該是這樣的:
IP: 192.168.100.10
netmask: 255.255.255.0
gateway: 192.168.100.254
hostname: clientlinux.centos.vbird
DNS: 168.95.1.1
以 Linux 作業(yè)系統(tǒng)為例,并且 clientlinux 僅有 eth0 一張網(wǎng)卡時(shí),他的設(shè)定是這樣的:
[root@clientlinux ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT="yes"
BOOTPROTO=none
IPADDR=192.168.100.10
NETMASK=255.255.255.0
GATEWAY=192.168.100.254 <==這個(gè)設(shè)定最重要啦!
DNS1=168.95.1.1 <==有這個(gè)就不用自己改 /etc/resolv.conf
[root@clientlinux ~]# /etc/init.d/network restart
[root@clientlinux ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 192.168.100.254 0.0.0.0 UG 0 0 0 eth0
[root@clientlinux ~]# ping -c 2 192.168.100.254 <==ping自己的gateway(會(huì)成功)
[root@clientlinux ~]# ping -c 2 192.168.1.254 <==ping外部的gateway(會(huì)失敗)
最后一個(gè)動(dòng)作有問題喲!怎么會(huì)連 ping 都沒有辦法 ping 到 Router A 的 IP 呢?如果連 ping 都沒有辦法給予回應(yīng)的話, 那么表示我們的連線是有問題的!再從剛剛的回應(yīng)連線需求流程來看一下吧!
發(fā)起連線:clientlinux --> Linux Router (OK) --> Router A (OK)
回應(yīng)連線:Router A (此時(shí) router A 要回應(yīng)的目標(biāo)是 192.168.100.10),Router A 僅有 public 與 192.168.1.0/24 的路由,所以該封包會(huì)由 public 介面再傳出去,因此封包就回不來了...
發(fā)現(xiàn)了嗎?網(wǎng)路是雙向的,此時(shí)封包出的去,但是非??蓱z的,封包回不來~那怎辦呢?只好告知 Router A 當(dāng)路由規(guī)則碰到 192.168.100.0/24 時(shí),要將該封包傳 192.168.1.100 就是了!所以你要這樣進(jìn)行。
特別的路由規(guī)則: Router A 所需路由
假設(shè)我的 Router A 對外的網(wǎng)卡為 eth1 ,而內(nèi)部的 192.168.1.254 則是設(shè)定在 eth0 上頭。 那怎么在 Router A 增加一條路由規(guī)則呢?很簡單啊!直接使用 route add 去增加即可!如下所示的情況:
[root@routera ~]# route add -net 192.168.100.0 netmask 255.255.255.0
> gw 192.168.1.100
不過這個(gè)規(guī)則并不會(huì)寫入到設(shè)定檔,因此下次重新開機(jī)這個(gè)規(guī)則就不見了!所以,你應(yīng)該要建立一個(gè)路由設(shè)定檔。 由于這個(gè)路由是依附在 eth0 網(wǎng)卡上的,所以設(shè)定檔的檔名應(yīng)該要是 route-eth0 喔!這個(gè)設(shè)定檔的內(nèi)容當(dāng)中,我們要設(shè)定 192.168.100.0/24 這個(gè)網(wǎng)域的 gateway 是 192.168.1.100,且是透過 eth0 ,那么寫法就會(huì)變成:
[root@routera ~]# vim /etc/sysconfig/network-scripts/route-eth0
192.168.100.0/24 via 192.168.1.100 dev eth0
目標(biāo)網(wǎng)域 透過的gateway 裝置
[root@routera ~]# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
120.114.142.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.100.0 192.168.1.100 255.255.255.0 UG 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
0.0.0.0 120.114.142.254 0.0.0.0 UG 0 0 0 eth1
上述觀察的重點(diǎn)在于有沒有出現(xiàn) 192.168.100.0 那行路由!如果有的話,請 ping 192.168.100.10 看看能不能有回應(yīng)? 然后再到 clientlinux 上面去 ping 192.168.1.254 看看有沒有回應(yīng),你就知道設(shè)定成功咯!好了,既然內(nèi)部保護(hù)網(wǎng)路已經(jīng)可以連上 Internet 了,那么是否代表 clientlinux 可以直接與一般員工的網(wǎng)域,例如 workstation 進(jìn)行連線呢?我們依舊透過路由規(guī)則來探討一下,當(dāng) clientlinux 要直接連線到 workstation 時(shí),他的連線方向是這樣的 (參考圖 8.2-1):
連線發(fā)起: clientlinux --> Linux Router (OK) --> workstation (OK)
回應(yīng)連線: workstation (連線目標(biāo)為 192.168.100.10,因?yàn)椴]有該路由規(guī)則,因此連線丟給 default gateway,亦即是 Router A) --> Router A (OK) --> Linux Router (OK) --> clientlinux
有沒有發(fā)現(xiàn)一個(gè)很可愛的傳輸流程?連線發(fā)起是沒有問題啦,不過呢,回應(yīng)連線竟然會(huì)偷偷透過 Router A 來幫忙呦! 這是因?yàn)?workstation 與當(dāng)初的 Router A 一樣,并不知道 192.168.100.0/24 在 192.168.1.100 里面啦!不過,反正 Router A 已經(jīng)知道了該網(wǎng)域在 Linux Router 內(nèi),所以,該封包還是可以順利的回到 clientlinux 就是了。
讓 workstation 與 clientlinux 不透過 Router A 的溝通方式
如果你不想要讓 workstation 得要透過 Router A 才能夠連線到 clientlinux 的話,那么就得要與 Router A 相同,增加那一條路由規(guī)則咯!如果是 Linux 的系統(tǒng),那么如同 Router A 一樣的設(shè)定如下:
[root@workstation ~]# vim /etc/sysconfig/network-scripts/route-eth0
192.168.100.0/24 via 192.168.1.100 dev eth0
[root@workstation ~]# /etc/init.d/network restart
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.100.0 192.168.1.100 255.255.255.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
最后只要 clientlinux 使用 ping 可以連到 workstation,同樣的,workstation 也可以 ping 到 clientlinux 的話,就表示你的設(shè)定是 OK 的啦!搞定!而透過這樣的設(shè)定方式,你也可以發(fā)現(xiàn)到一件事,那就是:『路由是雙向的,你必須要了解出去的路由與回來時(shí)的規(guī)則』。 舉例來說,在預(yù)設(shè)的情況下 (Router A 與 workstation 都沒有額外的路由設(shè)定時(shí)),其實(shí)封包是可以由 clientlinux 連線到 workstation 的,但是 workstation 卻沒有相關(guān)的路由可以回應(yīng)到 clientlinux ~所以上頭才會(huì)要你在 Router A 或者是 workstation 上面設(shè)定額外的路由規(guī)則啊!這樣說,了解了吧? ^_^
用 Linux 作一個(gè)靜態(tài)路由的 Router 很簡單吧!以上面的案例來說,你在 Linux Router 上面幾乎沒有作什么額外的工作,只要將網(wǎng)路 IP 與網(wǎng)路介面對應(yīng)好啟動(dòng),然后加上 IP Forward 的功能, 讓你的 Linux 核心支援封包轉(zhuǎn)遞,然后其他的工作咱們的 Linux kernel 就主動(dòng)幫你搞定了!真是好簡單!
不過這里必須要提醒的是,如果你的 Linux Router 有設(shè)定防火墻的話, 而且還有設(shè)定類似 NAT 主機(jī)的 IP 偽裝技術(shù),那可得特別留意,因?yàn)檫€可能會(huì)造成路由誤判的問題~