目标:
- 自带的移动路由器
- 网络隔离,避免路由泄露
- 性能足够强大 (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
- 配置 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)