關鍵字
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測試這里就不帖圖了。