虚拟机之间如何跨主通讯

2019 年 7 月 17 日
 snappyone

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

宿主机 A:

vm1(192.168.122.21)

宿主机 B:

vm2(192.168.122.24)

2674 次点击
所在节点    程序员
19 条回复
zjsxwc
2019 年 7 月 17 日
给你两个虚拟机加 host only 虚拟网卡呗,
如果一定要用默认的 nat 网卡就配置下端口映射也可以的
Tink
2019 年 7 月 17 日
你的两个主机都在一个网段了,直接桥接不行?
snappyone
2019 年 7 月 17 日
@Tink 两个宿主机不在一个网段
snappyone
2019 年 7 月 17 日
@zjsxwc 需求有点像把所有虚拟机加入一个 vpn 中一样
zjsxwc
2019 年 7 月 17 日
@zjsxwc #1 是桥接网卡 bridged,不是 host only
zjsxwc
2019 年 7 月 17 日
@snappyone #4

你的需求用 zerotier 这种吧
hoyixi
2019 年 7 月 17 日
网卡桥接的话,虚拟机和宿主机在同一网段,好似一台物理机接入宿主机的局域网一样。

这情况下,你 2 台宿主机怎么通讯,你的 2 台虚拟机就怎么通讯
iceheart
2019 年 7 月 17 日
flannel ?
snappyone
2019 年 7 月 17 日
@zjsxwc 我去看看 zerotier,谢谢
snappyone
2019 年 7 月 17 日
@iceheart 这两天有在看 k8s 跟 flannel,但是还不知道怎么部署
snappyone
2019 年 7 月 17 日
@hoyixi 这个需要虚拟机有独立的外网 ip 吧
hoyixi
2019 年 7 月 17 日
那看你具体情况了

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

你 2 台宿主机怎么通讯?如果是都在同一个局域网内,那虚拟机之间也一样;如果跨网络,那虚拟机也一样。
defunct9
2019 年 7 月 17 日
vxlan
cadmuxe
2019 年 7 月 17 日
不知道你的需求是什么。
大概提供一个思路,希望有专门做网络的人看一看。
因为你虚拟机和 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
2019 年 7 月 17 日
你可以把桥接模式认为,哪有什么虚拟机 ?都是物理主机
nnnToTnnn
2019 年 7 月 17 日
teamview ,或者 openvpn ,pptp 等等,组建一个虚拟隧道不就可以了?
snappyone
2019 年 7 月 17 日
@nnnToTnnn openvpn 应该可以
CallMeReznov
2019 年 7 月 17 日
无脑桥接即可
onice
2019 年 7 月 17 日
全部桥接。不过宿主机必须要连接外部网络才行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/583650

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX