软路由基本配置
奔腾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自带软路由+网桥,nat模式,开机自动配置iptables
手动通过brctl
命令添加物理LAN口
Libvirt软路由/网桥的配置
配置入口:
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
网络的配置文件,大致如下所示:
<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
等值,详细的取值及含义见这里。
由于WAN端有IP-MAC绑定,虚拟机及软路由LAN端的机器需要通过NAT访问网络,以使用WAN口的IP及MAC。
nat
模式会在iptables中配置如下路由规则:
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
其中转发规则包括:
- 允许WAN到LAN的指定IP段,指定状态(RELATED,ESTABLISHED)的连接
- 允许LAN的指定IP段到WAN的连接
- 允许LAN内部的连接
- 禁止传入传出LAN网桥的其他(非指定IP段)的连接
另外在NAT模式下,nat
表内配置有一些针对传出连接的masquerade规则。
如果您的网络环境没有限制,也可以尝试
- 路由(routed)/转发(forward):
<forward mode='route'>
,允许WAN到LAN的传入连接,而无论其状态如何 - 开放:
<forward mode='open'>
,有转发,没有防火墙规则 - 封闭:
<forward>
</forward>
这两个标签及之间的内容都删掉,不配置转发
等模式。相应地自动生成的防火墙配置见这里
添加物理LAN口
之后手动添加USB 3.0千兆网卡作为物理LAN口:
root@localhost:~# brctl addif virbr0 enx123456789012
如果是长期安装在软路由上的网卡,也可以将该命令写入/etc/rc.local
。
例如要添加名为enp5s0
的PCI网卡,可以在该文件中写入:
brctl addif virbr0 enp5s0
为什么是这样一个畸形的硬件配置?
要不是为了写另一篇文章,我都不想管这台机器叫软路由。。。叫“存储服务器”或者“文件服务器”更合适一些。
奔腾G3258:当然是为了超频买的啊,平时限制一下频率,降点电压,也耗不了多少电。
2*8GB DDR3-2133:当时眼馋APU平台,所以屯内存的时候就直接要了DDR3-2133,实际对G3258来说是浪费,而Ryzen又都要DDR4。。。
华硕R9 280X 3G:某宝买的,想拿来学OpenCL,做双精度浮点运算,结果连驱动有没有装上都不知道。
机箱是GAMEMAX的老款龙骑士,自带8个3.5硬盘位+1个热插拔3.5/2.5硬盘位+3个5.25光驱位,背板上正对电源的位置有两个理线用的塑料卡子,塞一块SATA SSD做启动盘还不是美滋滋。3个光驱位当然是转成硬盘位啦,我用的是某某科的3转4硬盘架,3转5没敢考虑。
主板自带6个SATA口,配一块8个SAS口的转接卡正好是14口,上面的机箱也正好是14个硬盘位,强迫症患者表示极度舒适。我用的转接卡是IBM M1015刷IT固件。
这些东西堆下来,550W的电源差不多够了,只要别让CPU显卡同时满载,同时所有机械硬盘同时启动即可(这得多苛刻啊)。为了接这么多块硬盘,模组电源+模组线自然是必不可少的,XTR550有4个硬盘供电口,自己做三条1转4 SATA的模组线给12块机械硬盘供电,再用一条自带的模组线给SSD、热插拔硬盘位和风扇供电。
为什么要用Libvirt?直接iptables+dnsmasq不就好了吗?
因为Libvirt已经装在这台机器上了,而且virbr0
这个网桥已经配置好NAT和DHCP了,就这么简单。
直接iptables+dnsmasq的话,转发倒是好说,dnsmasq里面还有不少Option,每个都是坑,一时半会搞不定(捂脸)
网友评论