摘要:不過我們不做那么深究的討論,簡化問題,系統實際上沒有實現相關的虛擬路由器設備,自然也沒有工具可以操作路由器,因為本身就是一臺路由器。
本文首發于我的公眾號 cloud_dev,專注于干貨分享,號內有大量書籍和視頻資源,后臺回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。
這篇文章繼上篇文章 Linux 虛擬網絡設備詳解之 Bridge,上篇發表之后,有讀者問我這樣一個問題:
我的回答基本上是一句廢話,因為只要你知道點網絡的基礎知識,肯定知道這種情況要走三層路由。
但知道歸知道,不實踐永遠不知道自己是不是真的知道(有點繞),我相信那位讀者也是希望我能講講這其中具體是怎么路由的,今天這篇文章就來說說這個。
Linux 本身就是一臺路由器前面的文章我們學習了多種虛擬的網絡設備,包括網卡、交換機等,也了解了怎么用工具來操作這些設備,那么,回到今天的主題,路由器有沒有對應的虛擬設備,能不能也用相關工具來操作呢,這個答案如果要深究的話,也是有的,比如 OpenStack 的 DVR、一些開源的虛擬路由器實現等等。
不過我們不做那么深究的討論,簡化問題,Linux 系統實際上沒有實現相關的虛擬路由器設備,自然也沒有工具可以操作路由器,因為 Linux 本身就是一臺路由器。(這也是我文章的標題對 vRouter 打雙引號的原因)
Linux 提供一個開關來操作路由功能,就是 /proc/sys/net/ipv4/ip_forward,默認這個開關是關的,打開只需:
echo 1 > /proc/sys/net/ipv4/ip_forward
但這種打開方式只是臨時的,如果要一勞永逸,可以修改配置文件 /etc/sysctl.conf,添加或修改項 net.ipv4.ip_forward 為:
net.ipv4.ip_forward = 1
即可。
實踐為了降低大家實踐的難度,我們就不創建虛擬機了,直接使用 namespace,一條 ip 命令就可以搞定所有的操作。
我們按照下面的圖示進行操作(NS1 和 NS2 分布在不同網段):
創建兩個 namespace:
ip netns add ns1 ip netns add ns2
創建兩對 veth-pair,一端分別掛在兩個 namespace 中:
ip link add v1 type veth peer name v1_r ip link add v2 type veth peer name v2_r ip link set v1 netns ns1 ip link set v2 netns ns2
分別給兩對 veth-pair 端點配上 IP 并啟用:
ip a a 10.10.10.1/24 dev v1_r ip l s v1_r up ip a a 10.10.20.1/24 dev v2_r ip l s v2_r up ip netns exec ns1 ip a a 10.10.10.2/24 dev v1 ip netns exec ns1 ip l s v1 up ip netns exec ns2 ip a a 10.10.20.2/24 dev v2 ip netns exec ns2 ip l s v2 up
驗證一下: v1 ping v2,結果不通。
看下 ip_forward 的值:
[root@by ~]# cat /proc/sys/net/ipv4/ip_forward 0
沒開路由怎么通,改為 1 再試,還是不通。
看下 ns1 的路由表:
[root@by ~]# ip netns exec ns1 route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 v1
只有一條直連路由,沒有去往 10.10.20.0/24 網段的路由,怎么通?那就給它配一條:
[root@by ~]# ip netns exec ns1 route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.10.1 [root@by ~]# ip netns exec ns1 route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 v1 10.10.20.0 10.10.10.1 255.255.255.0 UG 0 0 0 v1
同理也給 ns2 配上去往 10.10.10.0/24 網段的路由。
最后再 ping,成功了!
[root@by ~]# ip netns exec ns1 ping 10.10.20.2 PING 10.10.20.2 (10.10.20.2) 56(84) bytes of data. 64 bytes from 10.10.20.2: icmp_seq=1 ttl=63 time=0.071 ms 64 bytes from 10.10.20.2: icmp_seq=2 ttl=63 time=0.070 ms ^C --- 10.10.20.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.070/0.070/0.071/0.008 ms總結
Linux 本身是一臺路由器。
上面的實驗使用 namespace 效果和使用虛擬機是一樣的,關鍵是知道有這個功能,知道怎么用就差不多了。
我的公眾號 cloud_dev,號內有大量書籍和視頻資源,后臺回復「1024」即可領取,分享的內容包括但不限于云計算虛擬化、容器、OpenStack、K8S、霧計算、網絡、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術等內容,歡迎大家關注。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11505.html
摘要:上周,在舉行的上,發布,整合和。多虧存儲應用程序會話到數據庫通常來說是下載安裝或者是,我們不需要特定的負載均衡器,運行完全沒有問題。用負載均衡器描述的展示了浮動和私有集群。特別感謝來自的的支持和在測試過程中作出的貢獻。 上周,在Austin舉行的OpenStack Summit上,CoreOS發布Stackanetes,整合Kubernetes和OpenStack。 一個月前,Core...
閱讀 2077·2023-04-25 19:15
閱讀 2244·2021-11-23 09:51
閱讀 1263·2021-11-17 09:33
閱讀 2164·2021-08-26 14:15
閱讀 2475·2019-08-30 15:54
閱讀 1581·2019-08-30 15:54
閱讀 2166·2019-08-30 12:50
閱讀 1131·2019-08-29 17:08