AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 409451
Accepted
mikl
mikl
Asked: 2012-07-20 17:09:20 +0800 CST2012-07-20 17:09:20 +0800 CST 2012-07-20 17:09:20 +0800 CST

如何将一系列公共 IP 桥接到 Debian/Ubuntu 上的 KVM 虚拟机

  • 772

数周以来,我一直在尝试找出正确的网络配置,以便与在我的服务器上运行的 KVM 虚拟机共享一系列公共 IP,但到目前为止运气不佳在友好的 ServerFault 社区的帮助下,我设法让它工作了。您可以在下面找到我的工作设置:

我的 ISP 将所有流量路由到192.168.8.118(因此需要成为 eth0 的主要 IP),但我必须192.168.239.160/28按我的意愿行事。

这是/etc/network/interfaces在主机上:

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   192.168.8.118
  broadcast 192.168.8.127
  netmask   255.255.255.224
  gateway   192.168.8.97
  pointopoint 192.168.8.97
  # This device acts as gateway for the bridge, so provide a route.
  up ip route add 192.168.8.118/32 dev eth0 scope host

# device: br0
auto  br0
iface br0 inet static
  bridge_stp      off
  bridge_maxwait  0
  bridge_fd       0
  address   192.168.239.174
  broadcast 192.168.239.175
  netmask   255.255.255.240
  gateway   192.168.8.118
  # Create and destroy the bridge automatically.
  pre-up brctl addbr br0
  post-down brctl delbr br0
  # Our additional IPs are allocated on the bridge.
  up ip route add to 192.168.239.160/28 dev br0 scope host

我已经配置了这样的虚拟机:

sudo ubuntu-vm-builder kvm precise \
                  --domain pippin \
                  --dest pippin \
                  --hostname pippin.hobbiton.arnor \
                  --flavour virtual \
                  --mem 8196 \
                  --user mikl \
                  --pass hest \
                  --bridge=br0 \
                  --ip 192.168.239.162 \
                  --mask 255.255.255.240 \
                  --net 192.168.239.160 \
                  --bcast 192.168.239.175 \
                  --gw 192.168.239.174 \
                  --dns 8.8.8.8 \
                  --components main,universe \
                  --addpkg git \
                  --addpkg openssh-server \
                  --addpkg vim-nox \
                  --addpkg zsh \
                  --libvirt qemu:///system ;

如果我检查虚拟机的 XML 定义,它的网络接口定义如下:

<interface type='bridge'>
  <mac address='52:54:00:b1:e9:52'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

当我(重新)启动虚拟机时,/var/log/syslog收到以下行:

Jul 20 03:13:02 olin kernel: [ 4084.652906] device vnet0 entered promiscuous mode
Jul 20 03:13:02 olin kernel: [ 4084.686388] br0: port 2(vnet0) entering forwarding state
Jul 20 03:13:02 olin kernel: [ 4084.686394] br0: port 2(vnet0) entering forwarding state

我的服务器正在运行 Ubuntu 12.04 64 位内核 3.2.0-26-generic(来自 Ubuntu)。我正在跑步libvirt-bin 0.9.8-2ubuntu1并且qemu-kvm 1.0+noroms-0ubuntu13.

主机上的 iptables 当前设置为允许所有流量(以消除它作为问题源),并且我启用了 ipv4 和 ipv6 流量的转发。

当我从主机通过 SSH 登录来宾时,来宾操作系统内没有互联网连接。客人的/etc/network/interfaces样子是这样的:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.239.162
    netmask 255.255.255.240
    network 192.168.239.160
    broadcast 192.168.239.175
    gateway 192.168.239.174
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 8.8.8.8
    dns-search pippin

现在可以了

上面的配置大纲实际上如我所愿。如果您想查看我之前的尝试,请参阅编辑历史记录。

ubuntu
  • 2 2 个回答
  • 11399 Views

2 个回答

  • Voted
  1. Best Answer
    Wyzard
    2012-07-20T19:08:29+08:002012-07-20T19:08:29+08:00

    如果是桥接,则不需要在主机上配置与虚拟机 IP 地址相关的任何内容。只需将它们配置为连接到网桥,并以通常的方式在每个 VM 中配置 IP。桥接在以太网层将网络连接在一起,IP 地址无关紧要;从您的 ISP 的角度来看,它看起来就像您有几台计算机插入直接连接到 ISP 的交换机。

    但是,如果您的 ISP将流量路由到主机的 .118 地址,则您需要将 VM 主机配置为充当路由器并转发 VM 的流量。为此,请bridge_ports eth0从您的接口文件中删除行ip route add to 192.168.239.160/28 dev br0,和echo 1 > /proc/sys/net/ipv4/ip_forward。在 VM 中,您需要将 192.168.8.118 配置为默认网关,并添加一条说明 192.168.8.118 可通过 直接访问的路由eth0。eth0(这是连接到主机的VM的br0.)

    在这两种情况下,您都不应该将虚拟机的地址直接添加到br0接口中。在桥接的情况下,您希望 VM 而不是主机响应这些地址的 ARP 请求,而在路由的情况下,您希望主机了解当它收到这些地址之一的数据包时,需要对其进行路由其他地方,不是本地交付的。

    • 4
  2. cas
    2012-07-20T19:01:52+08:002012-07-20T19:01:52+08:00

    您不想将 VM 的 IP 地址分配给主机的 br0 接口——这只会使该地址属于主机,而不属于 VM。

    但是,您的 VM 将需要一个网关地址来将所有出站数据包路由到。我建议在 /28 中为您的主机分配一个 IP,并将您的 VM 配置为使用该 IP 作为它们的默认路由。子网中第一个或最后一个可用 IP 是网关地址的合理选择....

    ip addr add 192.168.239.161/28 dev br0
    

    你启用了ip转发吗?例如,取消注释 /etc/sysctl.conf 中的以下内容(一个或两个用于 ipv4 和/或 ipv6):

    #net.ipv4.ip_forward=1
    #net.ipv6.conf.all.forwarding=1
    

    最后,您是否尝试过在 VM 的控制台登录(例如使用 virt-manager 或 vinagre 或 xvnc4viewer 等 VNC 查看器)?如果有,它有什么 IP 地址(如果有的话)?VM 是否配置为具有静态 IP 或 dhcp?如果是后者,您是否配置了 dhcp 服务器以将适当的 IP 地址提供给虚拟机 MAC 地址?

    • 1

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve