需求就是主機離路由器太遠,不想用網線連接。本來我以為會很簡單,但是配著配著發現真復雜,主要是無法橋接無線網卡,我勸你還是插網線。如果不聽勸,那快樂地折騰起來吧。
配置網絡環境的命令很多,為了避免復雜,這里所有的配置盡可能地通過修改/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服務。
五、補充
無