今天我遇到了一个问题,我只是想向大家问一个问题
我刚刚在我的系统中安装了 kvm,并且我已经设法在系统中安装并运行了一个节点,现在我想要的是我想在节点中托管一个服务器
我可以通过公共 IP(eth0)访问 KVM 主机服务器,唯一的接口
我有一个公共 IP 可以提供给节点,但我不知道该怎么做
每次我在 eth0 和新的 br0 接口之间建立桥接连接时,它都会失败,并且我会失去连接
那么我怎样才能从外部世界访问我的 kvm 节点?我对 KVM 还很陌生,请帮我了解如何链接网络的步骤
答案1
不要桥接您的eth0
。保留其 IP 地址和配置。相反,将您的主机设为路由器适用于您的虚拟机。
我们假设您的主机上的网络正常运行并且能够访问互联网。
您必须创建一个“纯虚拟”桥,该桥最初不会分配任何成员。我们称该桥为br0
:
ip link add name br0 type bridge
ip link set br0 up
尽管如此,我推测该桥一定有一些来自 IANA 私有空间的“内部”地址。假设如下192.168.95.1/24
:
ip address add 192.168.95.1/24 dev br0
现在,在你的盒子上配置一个伪装 NAT,并启用 IP 转发:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.95.0/24 -j MASQUERADE
您的所有虚拟机的 vNIC 都必须放入网桥中br0
。您将为它们提供192.168.95.2÷254
范围中的 IP 地址,并指定192.168.95.1
为默认网关。为了简单起见,您可以使用任何公共 DNS 服务,例如 Google 的8.8.8.8
和8.8.4.4
。如果您愿意,您可以为您的虚拟机设置 DHCP 和 DNS 服务器,例如,使用dnsmasq
(专门为此类情况设计)。
本质上,您正在创建一个简单的“NAT”路由器,它将具有一个eth0
作为 WAN 端的接口和一个br0
作为 LAN 端的接口。
答案2
如果您希望节点与主机共享公共 IP 地址(即 NAT),则@Nikita 的答案适用。
但是,如果希望节点使用单独的 IP 地址访问与主机相同的子网,那么就需要桥接真实接口eth0
,并通过桥接器将主机和节点都连接到网络。
如果您只有一个网络接口,远程进行这样的更改是有风险的。如果服务器托管在数据中心,通常会有远程协助服务来帮助您进行这样的更改。
1. 桥接物理端口
编辑当前配置(/etc/sysconfig/network-scripts/ifcfg-eth0
)以删除任何 IP 地址配置并添加:
BRIDGE=br0
2. 分配
为您的虚拟桥创建一个新的配置(/etc/sysconfig/network-scripts/ifcfg-br0
)。
DEVICE=br0
TYPE=Bridge
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
GATEWAY=xxx.xxx.xxx.xxx
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
DELAY=0
3. 应用更改
对于这样的更改,重新启动主机是应用更改最可靠的方法。
一旦重新启动,你就应该看到你的桥brctl show
。
远程更改
此类网络更改最好亲自进行。如果配置出现错误,则需要亲自访问才能修复。
过去,我编写了一个监视脚本来帮助我远程进行有风险的网络更改。启用后,它会轮询上游服务器以检测网络连接,如果网络不可用,它会恢复到上一次良好的网络配置。