需求就是主机离路由器太远,不想用网线连接。本来我以为会很简单,但是配着配着发现真复杂,主要是无法桥接无线网卡,我劝你还是插网线。如果不听劝,那快乐地折腾起来吧。
配置网络环境的命令很多,为了避免复杂,这里所有的配置尽可能地通过修改/etc/network/interfaces
来完成,这样可以清楚地看到我们改了什么,所以先备份一下/etc/network/interfaces
。
驱动网卡的过程需要网络,所以需要有线网卡支持,没有的话通过手机的usb共享网络分享一个,在使用手机的USB共享网络时,直接插电脑上是不会自动配置的,需要在/etc/network/interfaces
中添加
auto usb0
iface usb0 inet dhcp
然后重启电脑。
去掉pve的企业软件源,mv /etc/apt/source.list.d/pve-enterprise.list /etc/apt/source.list.d/pve-enterprise.list.bak
。
在用上无线网卡之前,我们主要通过显示器和键鼠操作命令行界面。
一、驱动网卡
这里以两个网卡为例,其一是BCM943602CS,给黑苹果用的网卡,也是我这台机器上主要用的网卡;其二是RTL8812bu,这个是之前给R2S做无线AP买的USB网卡,型号是CF-812AC,这里只用做安装驱动测试。
开始之前先了解下怎么算驱动成功呢,一个 ip a
命令就可以了,如果驱动的话会显示相应的网络接口,否则不显示。
编译之前需要添加pve的内核头文件
# 添加非订阅源
deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
apt update
apt install pve-headers-`uname -r`
1.1 BCM4360
BCM4360的驱动有编译好的,添加non-free源,然后添加无线驱动软件
echo '' /etc/apt/source.list
apt update
apt install broadcom-sta-dkms
modprobe wl
重启下电脑然后使用ip a
查看一下,是不是多了一个接口,我这里叫wlp5s0
,这样就算驱动成功了。
1.2 RTL88x2bu
RTL88x2bu没有编译好的软件包,只能用源码自己编译了,
apt install git
git clone https://github.com/morrownr/88x2bu-20210702
cd 88x2bu-20210702
bash install-driver.sh
reboot
有的驱动源码中没有提供安装脚本的话,一般情况都是通过make && make install
来编译和安装。重启后同样使用ip a
确认一下是否驱动成功,我这里是wlx200db046cbe5
。
二、连接wifi
多数的wifi使用wpa/wpa2加密,想连接这种加密的wifi需要wpasupplicant
支持
apt install wpasupplicant
然后修改/etc/network/interfaces
文件,添加无线接口配置
auto wlp5s0
iface wlp5s0 inet dhcp
wpa-ssid 你的wifi名称
wpa-psk 你的wifi密码
如果成功连上wifi,可以删除/etc/network/interfaces
文件中usb0
配置了。也可以通过分配的ip地址访问pve的web界面了。
三、请求转发
目前为止,咱们的无线网卡已经可以让pve上网了,但是给虚拟机配置网络的时候只能用虚拟网卡,正常情况下我们将无线网卡的网络桥接给虚拟机就好了,但是桥接无线网卡好像需要网卡支持monitor
模式,总之是如何都桥接不成功,那还有一个办法就是使用转发。
开始前,先介绍一下我现在的网络环境,路由器是OpenWRT,子网10.1.1.0/24,给pve分配的地址是10.1.1.3;在pve中新建了一个子网10.3.3.0/24,vmbr0是10.3.3.1,给虚拟机分配的地址是10.3.3.x。
首先,打开系统转发的功能,这相当于一个总开关,修改/etc/sysctl.conf
把其中net.ipv4.ip_forward=1
的注释去掉,然后执行sysctl -p
使配置生效。
3.1 虚拟机访问外网
使用iptables命令添加转发规则,也可以在/etc/network/interfaces
文件中配置,这里把所有的请求都通过无线网卡转发出去就可以了,直接附上我的/etc/network/interfaces
文件。
auto lo
iface lo inet loopback
iface enp4s0 inet dhcp
auto wlp5s0
iface wlp5s0 inet dhcp
wpa-ssid xxxx
wpa-psk xxxxxxxx
auto vmbr0
iface vmbr0 inet static
address 10.3.3.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -o wlp5s0 -j MASQUERADE
重启电脑,目前,桥可以正常上网了,但是当桥和虚拟机连接时虚拟机还是不能上网,因为虚拟机并不知道目前所处网络的环境,必须手动设置ip才能正常上网,所以我们可以给虚拟桥接口配置一个dhcp服务器,这样所有的虚拟机就可以通过dhcp客户端自动获得ip地址了。
3.2 外网访问虚拟机
这就稍微麻烦了,首先,你的路由需要手动配置路由的功能,把所有目的地址是10.3.3.0/24的请求路由到10.1.1.3,然后,在pve中,把请求转发到虚拟网卡。
第一步中,我用的OpenWRT,在网络|路由|静态IPv4路由中添加一条规则,接口填LAN
,目标10.3.3.0/24
,网关10.1.1.3
。这样当路由器下的设备访问10.3.3.0/24
时,请求就会到10.1.1.3
。
第二步,添加一条iptables规则就好了,还是直接上/etc/network/interfaces
文件:
auto lo
iface lo inet loopback
iface enp4s0 inet dhcp
auto wlp5s0
iface wlp5s0 inet dhcp
wpa-ssid xxxx
wpa-psk xxxxxxxx
auto vmbr0
iface vmbr0 inet static
address 10.3.3.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up iptables -t nat -A POSTROUTING -o wlp5s0 -j MASQUERADE;iptables -t nat -A POSTROUTING -d 10.3.3.0/24 -o vmbr0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -o wlp5s0 -j MASQUERADE; iptables -t nat -D POSTROUTING -d 10.3.3.0/24 -o vmbr0 -j MASQUERADE
折腾半天突然发现,外网能ping通虚拟机,可以通过浏览器访问网络,但是远程桌面连不上,SSH连不上。。。
四、DHCP服务器
安装dhcp服务器,安装完会自动启动,会有些错误,请忽略,因为咱们还没配置呢。
# 安装dhcp服务器
apt install isc-dhcp-server
# 备份一下默认的配置
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
编辑/etc/dhcp/dhcpd.conf
文件,填入以下内容新建一个子网,网段和虚拟网桥的网段;dns是我的主路由和一个公共dns;routers 是虚拟网桥的地址,注意虚拟网桥的地址设置为10.3.3.1/24
而不是10.3.3.1/32
,否则网络不能经过网桥转发。
subnet 10.3.3.0 netmask 255.255.255.0 {
range 10.3.3.10 10.3.3.99;
option domain-name-servers 10.1.1.1, 8.8.4.4;
option routers 10.3.3.1;
}
给vmbr0指定dhcp服务,修改/etc/default/isc-dhcp-server
文件如下,
INTERFACESv4=”vmbr0″
使用service isc-dhcp-server restart
启动dhcp服务。
五、补充
无
网友评论