實戰作業4,實驗環境下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主機之間實現跨網段通信