我有一个 CentOS 专用服务器(Hetzner):
IP:aa.bb.cc。16
网关:aa.bb.cc.1 网络
掩码:255.255.255.255
和附加 IP(安装了 Debian 的来宾 VM(libvirt)):
IP:aa.bb.cc。61
网关:aa.bb.cc.1 网络
掩码:255.255.255.192
我已经使用 Hetzner 文档( https://wiki.hetzner.de/index.php/Netzkonfiguration_CentOS/en#Routed_.28brouter.29 )设置了路由配置。
主机配置:
cat /etc/sysctl.conf
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.default.proxy_arp=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.eth0.send_redirects=0
net.ipv4.conf.br0.send_redirects=0
net.ipv4.conf.default.send_redirects=0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
猫 /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
HWADDR=XX:XX:XX:XX:XX:XX
BOOTPROTO=none
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
SCOPE="peer aa.bb.cc.1"
IPV6INIT=yes
IPV6ADDR=2a01:4f8:yyy:yyyy::2/128
IPV6_DEFAULTGW=fe80::1
IPV6_DEFAULTDEV=eth0
猫 /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
ONBOOT=yes
TYPE="Bridge"
BOOTPROTO=static
IPADDR=aa.bb.cc.16
NETMASK=255.255.255.255
IPV6INIT=yes
IPV6ADDR=2a01:4f8:yyy:yyyy::2/64
STP=off
DELAY=0
猫 /etc/sysconfig/network-scripts/route-br0
ADDRESS0=aa.bb.cc.61
NETMASK0=255.255.255.255
访客配置:
cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address aa.bb.cc.61
netmask 255.255.255.255
pointopoint aa.bb.cc.16
gateway aa.bb.cc.16
dns-nameservers 212.133.98.98 212.133.99.99 212.133.100.100
iface eth0 inet6 static
address 2a01:4f8:yyy:yyyy::4
netmask 64
address 2a01:4f8:yyy:yyyy::2
对于从访客 VM 到 Internet 的 Internet 访问,我添加了一条规则:
iptables -t nat -A POSTROUTING -o eth0 -s aa.bb.cc.61 -j SNAT --to-source aa.bb.cc.16
问题:可以通过访客 IP aa.bb.cc 从 Internet 访问访客 VM。61在路由模式下?当我从外部(互联网)ping 到 aa.bb.cc 时。61我收到“请求超时”。但是 aa.bb.cc.16(主机)ping 正常。我必须添加什么规则?
谢谢你。
首先,有几点需要明确。
您使用的指南是指“路由器模式”和“桥接模式”。
所描述的路由器模式几乎完全没有意义。它涉及创建一个空的“仅主机”网桥,将您的 VM 连接到该网桥,然后将 IP 级别的流量从该网桥路由到您的出站接口。这忽略了 libvirt 可以创建自己的 NAT 虚拟接口(带有可选路由、DHCP 和 DNS)并将 VM 接口连接到该接口的事实。事实上,libvirt 默认创建并启用了这个网络。它被称为“默认”网络。
在您的情况下,您有两个子网(我假设它们位于单独的第 2 层域上 - 几乎所有情况都是如此)。一个地址将用于访问您的管理程序“aa.bb.cc.16/32”(这是一个无效的子网 - 稍后会详细介绍)该地址可以直接放置在接口上。
然后你在另一个子网上有第二个 IP (aa.bb.cc.61/26)。此地址需要在来宾内的 VM 接口上进行。这可以直接使用网桥来完成,虽然您最初发布的指南为“路由模式”提供了糟糕的解决方案,但直接使用网桥的建议配置实际上是正确的处理方式。但是,它也提供了完全不正确的配置。
如果您更新值以反映您的方案,则以下网络配置将适用于所述网桥:
完成此操作后,使用此网桥作为连接 VM NIC 的设备。如果需要,您可以在网桥本身上放置一个 IP 地址,从而允许主机和来宾之间进行通信。但是,这将在您申请公共访问的子网上。如果您确实需要主机到来宾通信,我建议通过“默认”NAT 接口或通过在主机和来宾上都具有专用 IP 空间的空桥(这将在虚拟机)。
附带说明一下,您为管理程序 IP (255.255.255.255) 发布的网络掩码是 32 位。这将不允许在其网络上使用单个地址,我假设这只是一个错字。如果不是错字,您需要使用实际上允许主机的地址空间,即使它只是 31 位网络掩码。
这涵盖了一般意义上的事物。希望这些信息足以让您做出决定并正确配置。
这是工作解决方案:
猫 /etc/sysconfig/network-scripts/ifcfg-eth0
猫 /etc/sysconfig/network-scripts/ifcfg-br0
mv /etc/sysconfig/network-scripts/route-eth0 /etc/sysconfig/network-scripts/route-br0 cat cat /etc/sysconfig/network-scripts/route-br0
访客配置:
cat /etc/network/interfaces