V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
snappyone
V2EX  ›  程序员

虚拟机之间如何跨主通讯

  •  
  •   snappyone · 2019-07-17 09:23:37 +08:00 · 2154 次点击
    这是一个创建于 1737 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有 2 台宿主机,都是 ubuntu 的,每个上面都开了几台 vm,大概的网络拓扑如下,如何让 vm1 和 vm2 能够直接通讯呢:

    宿主机 A:

    vm1(192.168.122.21)

    宿主机 B:

    vm2(192.168.122.24)

    19 条回复    2019-07-17 15:51:52 +08:00
    zjsxwc
        1
    zjsxwc  
       2019-07-17 09:25:36 +08:00
    给你两个虚拟机加 host only 虚拟网卡呗,
    如果一定要用默认的 nat 网卡就配置下端口映射也可以的
    Tink
        2
    Tink  
       2019-07-17 09:26:19 +08:00
    你的两个主机都在一个网段了,直接桥接不行?
    snappyone
        3
    snappyone  
    OP
       2019-07-17 09:28:29 +08:00
    @Tink 两个宿主机不在一个网段
    snappyone
        4
    snappyone  
    OP
       2019-07-17 09:29:08 +08:00
    @zjsxwc 需求有点像把所有虚拟机加入一个 vpn 中一样
    zjsxwc
        5
    zjsxwc  
       2019-07-17 09:29:31 +08:00
    @zjsxwc #1 是桥接网卡 bridged,不是 host only
    zjsxwc
        6
    zjsxwc  
       2019-07-17 09:30:15 +08:00
    @snappyone #4

    你的需求用 zerotier 这种吧
    hoyixi
        7
    hoyixi  
       2019-07-17 09:32:55 +08:00
    网卡桥接的话,虚拟机和宿主机在同一网段,好似一台物理机接入宿主机的局域网一样。

    这情况下,你 2 台宿主机怎么通讯,你的 2 台虚拟机就怎么通讯
    iceheart
        8
    iceheart  
       2019-07-17 09:34:49 +08:00 via Android
    flannel ?
    snappyone
        9
    snappyone  
    OP
       2019-07-17 09:34:49 +08:00
    @zjsxwc 我去看看 zerotier,谢谢
    snappyone
        10
    snappyone  
    OP
       2019-07-17 09:35:14 +08:00
    @iceheart 这两天有在看 k8s 跟 flannel,但是还不知道怎么部署
    snappyone
        11
    snappyone  
    OP
       2019-07-17 09:35:39 +08:00
    @hoyixi 这个需要虚拟机有独立的外网 ip 吧
    hoyixi
        12
    hoyixi  
       2019-07-17 09:41:03 +08:00
    那看你具体情况了

    上面说了,虚拟机网卡如果是桥接模式,虚拟机就像一台实际的电脑,接入你宿主机所在网络。

    你 2 台宿主机怎么通讯?如果是都在同一个局域网内,那虚拟机之间也一样;如果跨网络,那虚拟机也一样。
    defunct9
        13
    defunct9  
       2019-07-17 09:53:14 +08:00
    vxlan
    cadmuxe
        14
    cadmuxe  
       2019-07-17 10:09:06 +08:00
    不知道你的需求是什么。
    大概提供一个思路,希望有专门做网络的人看一看。
    因为你虚拟机和 host 是桥接,通过一个虚拟网卡,他们是在一个网段的(只限于那个虚拟网卡和虚拟桥)。同时 host 还有真实的网卡连到外部。
    Host1 92.168.122.1 [92.168.122.0/24]
    Vm1 192.168.122.2

    Host1 92.168.123.1 [92.168.123.0/24]
    Vm1 192.168.123.2

    host1 92.168.122.1 当作第一个网段的 gateway, 在 host1 上设置 ip_forwarding=1, 并且设置 ip rule 把这个网段的包从 eth0 push 出去。
    在 host2 上做同样的操作。

    在 host1,host2 的 router 上设置 route 把俩个网段 push 到正确的机器上应该就行了。

    ---
    如果只是想要通信,envoyproxy.io
    openbsd
        15
    openbsd  
       2019-07-17 10:25:13 +08:00
    你可以把桥接模式认为,哪有什么虚拟机 ?都是物理主机
    nnnToTnnn
        16
    nnnToTnnn  
       2019-07-17 10:28:29 +08:00
    teamview ,或者 openvpn ,pptp 等等,组建一个虚拟隧道不就可以了?
    snappyone
        17
    snappyone  
    OP
       2019-07-17 10:33:16 +08:00
    @nnnToTnnn openvpn 应该可以
    CallMeReznov
        18
    CallMeReznov  
       2019-07-17 10:33:46 +08:00
    无脑桥接即可
    onice
        19
    onice  
       2019-07-17 15:51:52 +08:00
    全部桥接。不过宿主机必须要连接外部网络才行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   964 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 22:08 · PVG 06:08 · LAX 15:08 · JFK 18:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.