目标:

  • 自带的移动路由器
  • 网络隔离,避免路由泄露
  • 性能足够强大 (1 Core – 1 Thread 2.x GHz amd64 CPU, 512 MiB RAM, 0.5G ROM, 10Gbps vNetwork, Internet connection speed depends on your physical network interface and your ISP)

Win

两个 Hyper-V vXSwitch 解决,参考:

需要注意的几个地方:

  • 不建议使用 Koolshare 等第三方改版固件,推荐使用 Lean 的 OpenWRT 版本。
  • 避免默认 IP 段冲突,提前断开所有外部链接。鉴于天朝网络现状,记得删除 WAN6 网卡。禁用 Secure Boot。禁用 VM Balloon。关闭 Memory Page Trimming。
  • 如 VM 无法识别硬盘,请使用 SATA 模式而非默认 SCSI 模式。
  • 部署好 VM 之后需要手动指定 HpV VxSwitch 的 IP 和网关,DNS 置为虚拟机 IP。
  • 先添加 内部网络 接口,再添加 外部网络 接口。 内部网络 eth0 被默认为 OpenWRT 的 LAN, eth1 默认为 OpenWRT 的 WAN。注意虚拟交换机对物理网卡控制权限在 Host OS 与 Guest OS 间的分配。
  • 如有 多 WAN 需求,依次添加即可。务必开启 MAC Spoofing 和注意 Guest OS 对 Physical Host Network Interface 的控制。
  • 无线网络在数据链路层及以下层面仍然有 Host OS 控制并完成无线网络的 Associate 和 Authenticate,网络层及以上层面交由 VM 控制,此时被桥接的物理网卡应当在 VM 中被视为有线网络接口。

Linux

网络结构图如下:

        +--------------------------------------+
        |         [VMware - OpenWRT]           |
        |          eth0|    |eth1              |
Host---vnic1--vmnet3---+    +---vmnet2 - wlan0 |
 |  \   |                                  |   |
 |   \  |                      Physical Router |
vnic0--swint(manage port)          |           |
 |      |    |                     |           |
 |      +----|---------------------|-----------+
 +-------swint-ctrler              |
 |           |                  Internet
 |           |
 +-------Open vSwitch

配置步骤(以物理网卡为无线网络为例 – Arch Linux 搭配 Open vSwitch):

  • 初始化 vSwitch
# systemctl start ovsdb-server.service
# systemctl start ovs-vswitchd.service
# ovs-vsctl init
# ovs-vsctl show
# ovs-vsctl add-br swint
  • 新建 vSwitch Port 作为 Virtual NIC
# ln -sf $(which ovs-testcontroller) /usr/bin/ovs-controller
# ovs-vsctl add-port swint vnic0 -- set interface vnic0 type=internal
# ovs-vsctl add-port swint vnic1 -- set interface vnic1 type=internal
# ovs-vsctl set int vnic1 mac="aa\:bb\:cc\:dd\:ee\:ff"
  • 桥接虚拟机 NIC 至对应 Port 的 Virtual NIC
$ sudo vmware-netcfg
VMWare-NetCFG
  • 配置 vSwitch 控制器并启用
# ovs-testcontroller punix:/run/openvswitch/swint-ctrler.sock
# ovs-vsctl set-fail-mode swint secure
  • 禁用系统层面的网络管理器
# systemctl disable --now NetworkManager-wait-online.service
# systemctl disable --now NetworkManager.service
# systemctl disable --now dhcpcd
# systemctl disable --now dnsmasq
# systemctl disable --now dnscrypt-proxy
# systemctl disable --now wpa_supplicant
  • 部署 VM 并进行初始化配置

前往 http://openwrt.kmahyyg.xyz 下载对应的虚拟机磁盘镜像,配置好网络和资源分配。
初始化配置时请手动指定 vnic1 的网卡 IP 为 192.168.1.2/24 ,启动后修改对应的物理端口与 br-lan 的关系,修改子网网段。
30s 内完成:保存修改后的信息并修改 vnic1 为 DHCP 获取 IP。保存配置并进行下一步操作和进一步安装部署。

  • 部署数据链路层无线认证
# mkdir -p /etc/wpa_supplicant_passwd
# wpa_passphrase <SSID> <PASSWORD> > /etc/wpa_supplicant_passwd/wpa_WLAN_<SSID>.conf
  • 启动 VM
  • 连接物理无线网络,尝试从 VM 获取 IP 与默认路由

Shell 脚本 connect.sh

#!/usr/bin/env bash

WIRELESS_SSID=$1

if [[ -z ${WIRELESS_SSID} ]]; then
        echo "NO SSID APPENDED! EXIT!"
        exit 1
else
        echo "Connect to SSID: ${WIRELESS_SSID}"
fi

sudo wpa_supplicant -i wlan0 -B -c /etc/wpa_supplicant_passwd/wpa_WLAN_${WIRELESS_SSID}.conf
sudo nohup ovs-controller punix:/run/openvswitch/swint-ctrler.sock >/dev/null 2>&1 &
nohup vmware -x /<Virtual Machine Location>/LeanOpenWrt/LeanOW.vmx >/dev/null 2>&1 &
sleep 20
sudo dhcpcd vnic1

Shell 脚本 disconnect.sh:

#!/usr/bin/env bash

sudo dhcpcd -k vnic1
sudo pkill -9 ovs-controller
sudo pkill -9 wpa_supplicant
  • 享受吧!

其他信息

参考:

  • https://opengers.github.io/openstack/openstack-base-use-openvswitch/
  • http://www.rendoumi.com/open-vswitchde-ovs-vsctlming-ling-xiang-jie/
  • http://fishcried.com/2016-02-09/openvswitch-ops-guide/
  • https://www.itread01.com/content/1549907483.html
  • https://tonydeng.github.io/sdn-handbook/ovs/
  • https://www.starwindsoftware.com/starwind-v2v-converter
  • https://www.ibm.com/developerworks/cn/cloud/library/1401_zhaoyi_openswitch/index.html

OPKG 软件源:

20200112-19.07.0-x86_64 using src from Lean’s OpenWRT

src/gz openwrt_core http://openwrt.kmahyyg.xyz/targets/x86/64/packages
src/gz openwrt_base http://openwrt.kmahyyg.xyz/packages/x86_64/base
src/gz openwrt_luci http://openwrt.kmahyyg.xyz/packages/x86_64/luci
src/gz openwrt_packages http://openwrt.kmahyyg.xyz/packages/x86_64/packages
src/gz openwrt_routing http://openwrt.kmahyyg.xyz/packages/x86_64/routing

为了保持 opkg 的轻量,软件源默认不支持 https 协议。同时,为了规避潜在的一些不可言说的问题,部分软件包 ipk 编译为 M(模块化),没有直接集成于固件中,需要的可以自行替换软件源下载,支持的架构为:amd64 (x86_64 little-endian)

Last modified: 2020-01-22

Author