軟路由基本配置
奔騰G3258,技嘉B85-HD3 Rev. 2.1(喂
2*8GB DDR3-2133@1400(喂喂
華碩R9 280X 3G(喂喂喂
XFX XTR550(喂喂喂喂
Ubuntu 16.04.5, kernel 4.4.0-140(終于正常點了
Libvirt自帶軟路由+網(wǎng)橋,nat模式,開機(jī)自動配置iptables
手動通過brctl命令添加物理LAN口
Libvirt軟路由/網(wǎng)橋的配置
配置入口:
root@localhost:~# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # net-edit default
會通過Vim打開default網(wǎng)絡(luò)的配置文件,大致如下所示:
<network>
<name>default</name>
<uuid>...</uuid>
<forward dev='enp3s0' mode='nat'>
<interface dev='enp3s0'/>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac .../>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
...
</dhcp>
</ip>
</network>
<forward mode='xxxx'>這里可以填nat、route、bridge等值,詳細(xì)的取值及含義見這里。
由于WAN端有IP-MAC綁定,虛擬機(jī)及軟路由LAN端的機(jī)器需要通過NAT訪問網(wǎng)絡(luò),以使用WAN口的IP及MAC。
nat模式會在iptables中配置如下路由規(guī)則:
root@localhost:~# iptables -t filter -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -i enp3s0 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -o enp3s0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
root@localhost:~# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -o enp3s0 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -o enp3s0 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -o enp3s0 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -o enp3s0 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -o enp3s0 -j MASQUERADE
其中轉(zhuǎn)發(fā)規(guī)則包括:
- 允許WAN到LAN的指定IP段,指定狀態(tài)(RELATED,ESTABLISHED)的連接
- 允許LAN的指定IP段到WAN的連接
- 允許LAN內(nèi)部的連接
- 禁止傳入傳出LAN網(wǎng)橋的其他(非指定IP段)的連接
另外在NAT模式下,nat表內(nèi)配置有一些針對傳出連接的masquerade規(guī)則。
如果您的網(wǎng)絡(luò)環(huán)境沒有限制,也可以嘗試
- 路由(routed)/轉(zhuǎn)發(fā)(forward):
<forward mode='route'>,允許WAN到LAN的傳入連接,而無論其狀態(tài)如何 - 開放:
<forward mode='open'>,有轉(zhuǎn)發(fā),沒有防火墻規(guī)則 - 封閉:
<forward></forward>這兩個標(biāo)簽及之間的內(nèi)容都刪掉,不配置轉(zhuǎn)發(fā)
等模式。相應(yīng)地自動生成的防火墻配置見這里
添加物理LAN口
之后手動添加USB 3.0千兆網(wǎng)卡作為物理LAN口:
root@localhost:~# brctl addif virbr0 enx123456789012
如果是長期安裝在軟路由上的網(wǎng)卡,也可以將該命令寫入/etc/rc.local。
例如要添加名為enp5s0的PCI網(wǎng)卡,可以在該文件中寫入:
brctl addif virbr0 enp5s0
為什么是這樣一個畸形的硬件配置?
要不是為了寫另一篇文章,我都不想管這臺機(jī)器叫軟路由。。。叫“存儲服務(wù)器”或者“文件服務(wù)器”更合適一些。
奔騰G3258:當(dāng)然是為了超頻買的啊,平時限制一下頻率,降點電壓,也耗不了多少電。
2*8GB DDR3-2133:當(dāng)時眼饞APU平臺,所以屯內(nèi)存的時候就直接要了DDR3-2133,實際對G3258來說是浪費,而Ryzen又都要DDR4。。。
華碩R9 280X 3G:某寶買的,想拿來學(xué)OpenCL,做雙精度浮點運算,結(jié)果連驅(qū)動有沒有裝上都不知道。
機(jī)箱是GAMEMAX的老款龍騎士,自帶8個3.5硬盤位+1個熱插拔3.5/2.5硬盤位+3個5.25光驅(qū)位,背板上正對電源的位置有兩個理線用的塑料卡子,塞一塊SATA SSD做啟動盤還不是美滋滋。3個光驅(qū)位當(dāng)然是轉(zhuǎn)成硬盤位啦,我用的是某某科的3轉(zhuǎn)4硬盤架,3轉(zhuǎn)5沒敢考慮。
主板自帶6個SATA口,配一塊8個SAS口的轉(zhuǎn)接卡正好是14口,上面的機(jī)箱也正好是14個硬盤位,強(qiáng)迫癥患者表示極度舒適。我用的轉(zhuǎn)接卡是IBM M1015刷IT固件。
這些東西堆下來,550W的電源差不多夠了,只要別讓CPU顯卡同時滿載,同時所有機(jī)械硬盤同時啟動即可(這得多苛刻?。?。為了接這么多塊硬盤,模組電源+模組線自然是必不可少的,XTR550有4個硬盤供電口,自己做三條1轉(zhuǎn)4 SATA的模組線給12塊機(jī)械硬盤供電,再用一條自帶的模組線給SSD、熱插拔硬盤位和風(fēng)扇供電。
為什么要用Libvirt?直接iptables+dnsmasq不就好了嗎?
因為Libvirt已經(jīng)裝在這臺機(jī)器上了,而且virbr0這個網(wǎng)橋已經(jīng)配置好NAT和DHCP了,就這么簡單。
直接iptables+dnsmasq的話,轉(zhuǎn)發(fā)倒是好說,dnsmasq里面還有不少Option,每個都是坑,一時半會搞不定(捂臉)