libvirt guest:接受来自外部网络的连接

libvirt guest:接受来自外部网络的连接

libvirt 文档:

默认情况下,通过虚拟网络连接的来宾可以进行任何他们喜欢的传出网络连接。允许来自主机以及连接到同一 libvirt 网络的其他来宾的传入连接,但所有其他传入连接都会被 iptables 规则阻止。

但我希望客人能够接受来自“外部”的传入连接。

问题是 libvirt 自动设置的这些 iptables 规则:

*filter
:INPUT DROP [22:4523]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [606:91824]
...
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -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

如何配置 libvirt 以NEW在第一个中包含状态FORWARD规则中包含状态?或者摆脱拒绝规则或类似的规则。

我知道我可以自己手动将这样的规则添加到 iptables 中,但我很好奇是否可以通过更改 libvirt 配置来完成。我可以访问一台已经以这种方式配置的服务器,但我找不到如何配置(即使通过 diffing /etc)。


我在 Debian 8.5 Jessie 上使用 libvirt 1.2.9-9+deb8u2。我使用default网络:

$ sudo virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

$ sudo virsh net-dumpxml default
<network connections='6'>
  <name>default</name>
  <uuid>aafc9c08-98b2-499c-9058-8eb6fce47ab6</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

答案1

如果您希望访客能够完全透明地访问您网络的其余部分,请不要使用默认 NAT 网络。就我而言,我也禁用了它:

virsh net-list
Name                 State      Autostart
-----------------------------------------

在我的文件中/etc/network/interfaces,我有一个这样的定义,它br0在我的 NIC 上配置一个桥接设备eth0,我可以将其用于我的来宾:

########################################################################
# The network interface
# 192.168.1.0/24
#
#allow-hotplug eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.253
        netmask 255.255.255.0
        gateway 192.168.1.254
        bridge_ports eth0
        bridge_fd 0
        bridge_maxwait 0

然后,我可以在定义来宾时将之前定义的网桥指定为共享设备:

virsh dumpxml myguest
    ...
    <interface type='bridge'>
      <mac address='52:54:00:3c:75:30'/>
      <source bridge='br0'/>
      <target dev='vnet5'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
    </interface>
    ...

相关内容