openwrt 單網卡路由模擬實現


關鍵字

vlan openwrt 單臂路由

一直以來都認為路由器要至少要求是雙網卡,因為至少要有lan/wan。最近看了單臂路由的介紹,自己在虛擬機測試了一把,發現單網口做路由器確實可行!

測試環境

Manjaro Linux 主機
qemu openwrt 虛擬機環境(openwrt 固件可以在官方下載)

host 主機配置

這里因為是模擬,所以在宿主機(majaro)上要做一些配置。 實際使用的單臂路由,路由器網卡接口下一定是一個支持vlan的交換機,只需要配置交換機 vlan 即可。
這里僅給出本次測試的宿主機的 vlan 相關網卡的修改,單臂路由下的交換機配置的原理一樣。

網橋配置

因為虛擬機選擇的是NAT 網絡,所以需要做如下配置(注,這里vnet1 是 OpenWrt 虛擬機在 host 生成的虛擬網卡。virbr0 是 qemu NAT 網橋)

# 創建 vnet1_11 vlan id 11 
➜  ip link add link vnet1 name vnet1_11 type vlan id 11
# 創建 vnet1_10 vlan id 10
➜  ip link add link vnet1 name vnet1_10 type vlan id 10
# 默認 vnet1 被加入到 virbr0 網橋,這是 QEMU NAT 功能默認做的,需要把它去掉,把 vnet1_11 加入到網橋
➜  brctl delif virbr0 vnet1
➜  brctl addif virbr0 vnet1_11
➜  brctl show                 
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242f80d773e	no		
virbr0		8000.5254008e3f49	yes		virbr0-nic
							vnet1_11
➜  ip link set dev vnet1_11 up
➜  ip link set dev vnet1_10 up

這里操作原理是: 因為即將配置的路由器 WAN 口是 vlan 11,所以這里需要創建vlan 子接口支持vlanid 11。
vlan 10 的子網卡,這里假裝是路由器下的設備。

openwrt 配置

參考鏈接,openwrt 官方介紹
下面截取修改的部分: /etc/config/network, 新增部分很容易理解,沒加注釋。

config interface 'lan'
# 這里注釋掉是因為沒必要用橋接,不注掉其實也一樣,區別就是:
# 橋接時候會創建一個 br-lan 的網橋,vlan10 將被加入到網橋里,配置的靜態 IP 是在橋(br-lan)上
# 因為這里只有一個 vlan10 所以要不要橋都可以。如果設備上還有一個無線網卡,那么橋就是必須的,因為他們都是 lan 網絡。
#     option type 'bridge'
      option ifname 'vlan10'
      option proto 'static'
      option ipaddr '192.168.10.1'
      option netmask '255.255.255.0'

config interface 'wan'
      option ifname 'vlan11'
      option proto 'dhcp'

config device
      option type '8021q'
      option ifname 'eth0'
      option via '10'
      option name 'vlan10'

config device
      option type '8021q'
      option ifname 'eth0'
      option via '11'
      option name 'vlan11'

修改完重啟network,使修改生效service network restart

測試

在 wan 口做dhcp

wireshark抓取 dhcp 時網卡報文

抓包目的解釋了為什么要在host 創建 vlan 子網卡。如上圖,在 vnet1 上openwrt wan 口發來的報文是包含 vlan tag 的,而 qemu 虛擬網橋是不認識 vlan(8021q)報文的,經過子網卡后會剝離掉vlan 頭,將二層 8021q 報文轉為普通以太網報文。只有這樣openwrt wan 的dhcp 報文才能到qemu 網橋,整個dhcp 過程才會成功。
這時候可以嘗試ping 對端都是ok的。

ping:host->openwrt

ping:openwrt->host

在lan側做dhcp


可以知道 lan 側也是ok的。ping測試這里就不帖圖了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM