1. 程式人生 > >實戰作業4,實驗環境下Linux主機之間實現跨網段通信

實戰作業4,實驗環境下Linux主機之間實現跨網段通信

linux linux路由配置 centos linux學習

更多內容請點擊:

Linux學習從入門到打死也不放棄,完全筆記整理(持續更新,求收藏,求點贊~~~~)

http://blog.51cto.com/13683480/2095439


實驗目標:

用vmware多臺虛擬機模擬,實現主機間的跨網段通信(相互之間能ping通)。

實驗要求:

主機A 和 主機B 之間實現通信,中間至少跨越3個路由器(linux主機模擬路由器)

準備工作:

至少5臺虛擬機。

由於本身只安裝了centos6.9,centos7.4,redhat5.4 三臺虛擬機,所以臨時克隆了另外兩臺centos6,接下來將會以

centos6充當主機A,centos7充當主機B

redhate5和另外兩臺克隆機將分別命名R1,R2,R3,充當臨時路由器

地址規劃:
由於要求實現主機間的跨網段通信,所以需要將不同的終端配置不同網段的地址,

A: 192.168.6.45/24
B: 172.20.7.100/16
R1 eth0:192.168.6.1/24 eth1: 10.6.0.1/16
R2 eth0: 10.6.0.2/16 eth1: 10.0.0.1/8
R3 eht0: 10.0.0.2/8 eht1: 172.20.0.1/16


實現過程:


1. 大致流程圖

技術分享圖片

2. 按照需要給不同主機加配網卡

充當路由使用的R1,R2,R3主機加配一塊網卡,主機A 和主機B 有一塊可用網卡即可

技術分享圖片


3. 開啟虛擬機並登陸

為了查看方便,分別修改一下redhat5和兩臺克隆centos6的主機名為R1,R2,R3

由於是臨時修改,所以使用hostname命令直接修改,而且重新登錄即可,如圖,3臺主機重復執行即可

技術分享圖片

技術分享圖片


需要註意的是,當在R2和R3上通過ifconfig命令查看的時候,發現此地沒有eth0的網卡,而直接是 eth1 和eth2

這是由於R2和R3並非正常安裝的虛擬機,而是通過克隆而來的


技術分享圖片



4. CentOS 6修改網卡名稱:


當然,名稱的不同使用起來並沒有什麽區別,但是我們已經不想去修改已經規劃好的流程圖了,所以這裏我們直接修改網卡名稱


centos6環境下,使用cd命令進入/etc/udev/rules.d/目錄下,可以查看到:

技術分享圖片


其中70-persistent-net.rules就是網卡名稱的配置文件


當然,也可以使用 vim /etc/udev/rules.d/70-persistent -net.rules 命令直接打開


技術分享圖片

如圖,直接刪除第一行,將最後一行的eth2 改成 eth0 ,保存退出


修改不會立即生效,使用ethtool -i 命令查看網卡使用的驅動,發現都是e1000


技術分享圖片


使用modprobe -r e1000 卸載網卡驅動


在使用modprobe e1000 啟用網卡驅動,使用ifconfig命令,可以看見網卡名稱已經修改:


接著在R3上重復相同的操作即可


技術分享圖片


5. 配置IP地址

當然,我們可以通過ifconfig eth0 直接配置IP地址,比如

技術分享圖片


但是這種情況下只要一重啟,地址就會丟失,所以,這裏我們通過修改配置文件的方式來修改地址

使用cd /etc/sysconfig/network-scripts

可以查看到此目錄下有ifcfg-eth0的文件


技術分享圖片


使用vim ifcfg-eth0打開此文件

技術分享圖片


我們可以看到此文件包含的的內容,幾乎全是變量賦值,其他選項暫時不去關註,我們現在需要做的是把

BOOTPROTO=這一項默認的值是dhcp,需要改成 static 或者 none,

之後就可以添加IP地址了:

對於A主機而言,添上兩行就可以了:

IPADDR=192.168.6.45

NETMASK=255.255.255.0 這一項也可以寫成 PREFIX=24,效果一樣

保存退出,使用

service network restart 重讀配置文件

接著使用ifconfig查看,地址已經修改成功了

技術分享圖片

技術分享圖片


同樣的操作修改R1,由於redhat5.4的版本比較老,所有此文件中的內容會不一樣,同樣不去做過多關註,只修改我們需要的幾項即可

技術分享圖片


而且由於R1有兩張網卡,所以eth0 和eth1 需要分別配置,然後依然執行service network restart命令重啟網絡服務,可以看到配置已經生效


技術分享圖片


值得註意的是,R2和R3主機,默認是沒有ifcfg-eth1 這個文件的,我們是用cp命令直接將ifcfg-eth0復制一份,然後修改可以


技術分享圖片

另外,對於R2和R3,還是因為克隆的原因,使用service network restart命令的時候會出現錯誤

技術分享圖片


特別提醒,這是由於NetworkManager 這個服務的原因,這個服務在centos6上有沖突,會導致網卡無法啟動

使用service NetworkManager stop 命令可以關閉此服務

另外使用 chkconfig NetworkManager off 可以禁止此服務開機啟動

再次使用service network restart命令,網卡啟動成功,使用ifconfig命令成功獲得地址

技術分享圖片

技術分享圖片


同理在 R3 上做同樣修改。

技術分享圖片


最後是centos7,也就是A主機, 需要註意centos7上的默認第一塊網卡名稱為ens33,且重啟網絡服務的命令為:

systemctl restart network

其他並沒有大的區別:

技術分享圖片


6. 添加路由

到這裏地址配置的工作就完成了。

但是此時A和B兩臺主機之間是無法通信的,比如我們在A主機上ping B主機

技術分享圖片


為了主機A和主機B 之間通信,必須配置路由,這是本次實驗最重要的一環。我們在查看一下流程圖和規劃配置

技術分享圖片


A: 192.168.6.45/24
B: 172.20.7.100/16
R1 eth0:192.168.6.1/24 eth1: 10.6.0.1/16
R2 eth0: 10.6.0.2/16 eth1: 10.0.0.1/8
R3 eht0: 10.0.0.2/8 eht1: 172.20.0.1/16


主機A路由配置:

還是從A主機開始,由於規劃的網絡環境相對簡單,A主機只與R1相連,因此在這裏我們只需要添加一條路由就可以了,不管是主機路由,網絡路由,默認路由都可以,但是使用的網關必須是R1路由器的eth0

使用route add -host 172.20.7.100 gw 192.168.6.1 添加主機路由

另外使用route add default gw 192.168.6.1 添加一條默認路由


技術分享圖片


R1 路由配置

接下來,對於R1,由於R1和主機A在同一網段,所以不需要添加主機A路由,只需要添加主機B 或者網段4的路由記錄即可,但是考慮到實際情況,網段3上也可能出現相連的主機,所以在此我們把網段3的路由也添加上


使用: route add -net 172.20.0.0/16 gw 10.6.0.2 添加網段4 路由記錄 下一跳記錄指向R2的eth0端口

route add -net 10.0.0.0/8 gw 10.6.0.2 添加網段3路由記錄 下一跳記錄指向R2的eth0端口

技術分享圖片


R2 路由配置

同理 R2 由於和網段2、網段3直接相連,所以只需要對應添加網段1 和網段4 的路由記錄即可,

使用 : route add -net 192.168.6.0/24 gw 10.6.0.1 添加網段1路由記錄,下一跳記錄指向R1的eth1端口

route add -net 172.20.0.0/16 gw 10.0.0.2 添加網段4路由記錄,下一跳記錄指向R3的eth0端口

技術分享圖片


R3 路由配置

由於R3與網段3、網段4直接相連,所以需要添加網段1和網段2的路由記錄

使用: route add -net 192.168.6.0/24 gw 10.0.0.1 添加網段1路由記錄,下一跳指向R2的eth1端口

route add -net 10.6.0.0/16 gw 10.0.0.1 添加網段2路由記錄,下一跳指向R2的eth1端口

技術分享圖片


主機B 路由配置

由於B只有與R3相連這一條網絡出口,所以只需要添加一條默認路由即可,這裏我們同時也加上一條到主機A的主機路由

這裏需要註意,對於centos7而言,如果在ifcfg-ens33配置靜態地址的時候,如果不加上

GATEWAY=*.*.*.*

將無法配置默認路由,而如果加上這一行,使用 systemctl restart network重啟網絡服務的時候會自動添加一條默認路由

所以這裏我們只需要將配置文件網關(GATEWAY)=172.20.0.1 同時使用route add -host 192.168.6.45 gw 172.20.0.1 添加主機A的主機路由即可

技術分享圖片


7. 連接測試

首先,直接在A主機上對主機B的IP地址使用ping命令

技術分享圖片


很遺憾,第一次測試失敗,原因就是,linux默認不支持直接當做路由器使用,即,linux主機可以接受到數據,但是如果數據的目標地址不是自己的話,會直接丟棄而不會轉發出去

這裏我們需要對R1,R2,R3這三臺充當臨時路由器的主機進行配置


使用 echo 1 > /proc/sys/net/ipv4/ip_forward 命令可以開啟核心路由轉發功能,對於目標地址非本機的數據,不會拋棄,而是根據路由地址進行轉發。

技術分享圖片

技術分享圖片

技術分享圖片


配置完成之後再次嘗試在A主機上ping 主機B的ip地址 172.20.7.100,結果發現還是不通


技術分享圖片


註意此時的報錯提示:Destination Host Prohibited ,目標主機禁止


這種情況一般是由於防火墻的原因


為了方便測試,使用 service iptables stop 命令分別關閉主機A,R1,R2,R3的防火墻功能

對於B主機,由於是centos7系統,需要使用 systemctl stop firewalld 命令關閉防火墻


再次測試:

技術分享圖片


可以看到結果已經OK,主機A(Centos6) 和主機B (centos7)經過4個網段,中間跨過3次路由器(R1,R2,R3)實現了通信功能。


8. 小結

雖然只是一個小小的實驗,但在實現的工程中也並不是順風順水,一步到位的。中間出現了很多問題。


比如網卡名稱修改之後一直無法啟動,原因是centos6系統 NetworkManager服務不是很支持。

還有centos7添加默認路由一直不成功,原因是沒有添加默認網關


還有就是最最最讓我頭疼的,一度困擾了很久的問題就是: Destination Host Prohibited,就是這個報錯,這裏我反復檢查了N次路由配置,甚至重啟重來,最後更換路由主機,都沒有解決問題。


最後卻發現問題出在防火墻上,原本很簡單的一條命令就能解決的問題,卻困擾了我最久。 我以為我知道的,卻還是忽略了。


事實上不管做什麽事情都是這樣,你以為你會的,不一定是真正掌握的。


送給你一句話,也是馬永亮馬哥反復強調的:


只有經過不斷反復的練習和實踐,知識才能變成真正有用的技能。






實戰作業4,實驗環境下Linux主機之間實現跨網段通信