我有两台物理机 AB, A 用作便携式虚拟机集群, B 用作互联网提供端.
A 是 Win10 系统, 通过 Hyper-V 虚拟若干台在同一内部交换机 192.168.20.0/24 的虚拟机, A 作为其网关, 地址为 192.168.20.1
A 有一张物理网卡, 它是网口网卡, 用于连接 B 实现互访, 地址为 192.168.15.2/24, 网关设置为 192.168.15.1/24.
B 是 Windows 或 Mac 系统, 有两张物理网卡, 一张是无线网卡用于连接互联网, 一张是网口网卡用于连接 A, 地址是 192.168.15.1/24, 系统配置无线网卡将网络共享给网口网卡.
B 设置了 route 192.168.20.0 mask 255.255.255.0 192.168.15.2 A 设置了 route 192.168.10.0 mask 255.255.255.0 192.168.15.1
以上设置后 A 中虚拟机能够 ping 通 B, 但是 B 并不能 ping 通 A 中的虚拟机. 在 A 中 ping -S 192.168.15.2 192.168.20.1 也不能 ping 通.
请问下这种场景有什么好的解决方案吗???谢谢啦!
网上找到个图, 和我这种情况比较匹配, 大家可以参考一下.
1
Tianao 2020-12-21 11:17:31 +08:00 via iPhone 1
能 ping 通证明双向路由都没问题,建议检查防火墙配置是否响应 ICMP Echo request 或者先行以 192.168.20.1 作为源地址 ping 同段虚机测试。
|
2
flamhaze5946 OP @Tianao
我把防火墙中的 ICMP 拦截都关闭了. A 和 B 在 192.168.15.0/24 能互相 ping 通的, 同时宿主机 A 也能 ping 通虚拟机. 但是 B 不能 ping 通 A 的 192.168.20.1 地址, 也不能 ping 通 A 中的虚拟机. |
3
Tianao 2020-12-21 11:28:51 +08:00 via iPhone 1
B 上路由跟踪一下 192.168.20.1 看看?
|
4
flamhaze5946 OP @Tianao B 上使用 tracert 显示的是 * * * 超时
|
5
Tianao 2020-12-21 12:36:13 +08:00 via iPhone 1
第一跳是 192.168.15.2 并且显示 *?是不是 Hyper-V 给虚机网络做了源 NAT ?
|
6
ungrown 2020-12-21 13:08:23 +08:00 1
初步感觉是 NAT +1
|
7
flamhaze5946 OP |
8
flamhaze5946 OP |
9
zerohzd 2020-12-21 17:02:06 +08:00 1
别找别人的图。。自己手绘个拓扑,标好网卡和 IP
如果 192.168.15.0/24 网段的 IP 可以自己管理的话,全部的虚拟机网卡改桥接,IP 都配在 192.168.15.0/24,默认网关用 192.168.15.1 |
10
sujin190 2020-12-21 18:01:14 +08:00 1
Hyper-V 安装的虚拟机默认使用的内部网络是 nat 模式吧,外部 ping 肯定 ping 不通啊,你应该改为外部网络使用 A 的物理网卡,然后内部主机就能获取到 192.168.15.0/24 的地址了吧,和 B 在同一个网络肯定就可以 ping 通了
|
11
sujin190 2020-12-21 18:02:18 +08:00 1
nat 模式下想访问内部主机需要端口转发的吧,但是 windows 的端口转发似乎不是很好设置
|
12
cpstar 2020-12-21 18:59:32 +08:00 1
目测是 IP 转发的问题,设置了路由表,也只能解决 PC1 往两个网段的互通问题。
至于 PC1——如果是 Windows 系统的话——设置 IP 转发好像比较复杂,可能需要开启路由功能,相当于 Windows 作为路由器存在于两个网段中间,而 Linux 则简单的多,echo 1 > /proc/sys/net/ipv4/ip_forward,或者 sysctl -p net.ipv4.ip_forward=1 即可 或者就在 PC1 上做 NAT,把内网的服务映射到网卡 B 上 以上仅就图片内容论述,文字内容跟图片好像对不上,懒得仔细看了 |
13
flamhaze5946 OP @zerohzd
好的, 不过虚拟机不能用 192.168.15.0/24, 因为这个网卡一旦没有插线会丢失 IP, 不能做网关. |
14
flamhaze5946 OP @sujin190
不能使用物理网卡, 因为虚拟机内部通信不能断, 需要一个可靠的网关, 物理网卡一旦没有连接外部设备就会失去做网关的资格... |
15
flamhaze5946 OP @cpstar
正解, 昨天晚上我打开了宿主机的软路由功能, 然后就通了 = = |
16
flamhaze5946 OP @cpstar
今天在公司机器上试了下, 公司机器 mac 作为 B, B 开启了路由转发. B 中也运行有虚拟机, B 中的虚拟机可以 ping 通 A 中的虚拟机, 但是 A 中的虚拟机不能 ping 通 B 中的虚拟机, 有没有可能是安全策略导致的呢? 因为即使我有管理员权限, 但是仍然无法关闭防火墙中的禁 ping 规则... B 通过 route add -net 192.168.30/24 -gateway 192.168.15.2 -link 192.168.15.1 语句添加路由后, 部分网络访问出现了问题, 同时路由表中新增项为 0.0.4&0x3040 192.168.15.2 UGSc en8, 而不是 192.168.30/24 192.168.15.2 UGSc en8, 请问下 0.0.4&0x3040 和 192.168.30/24 有什么关系呢, 网络访问问题是否是出在这个 0.0.4&0x3040 上呢, 如果要正确添加路由应该用什么命令...谢谢~ |
17
flamhaze5946 OP @cpstar
又试了下, 不加-link 就不会出现网络问题, 我也忘了是哪里看到的加一个-link 了, 是为了指定网卡... |
18
cpstar 2020-12-22 16:32:13 +08:00 1
@flamhaze5946 16#
route add -net 192.168.30/24 -gateway 192.168.15.2 -link 192.168.15.1 第一个-net 写的是 192.168.30/24,应该是 192.168.30.0/24,少了一个.0 ? 另外 A 的虚机网是 192.168.20.0/24,本机网关 20.1,外网是 192.168.15.2 B 的虚机网是 192.168.30.0/24,本机网关 30.1,外网是 192.168.15.1 我的理解对么? |
19
flamhaze5946 OP @cpstar
mac 上的语法可以不用写全, 会自动补 0, 我之前是加了-link 这个参数后才出现奇怪的路由条目的, 不加就没事了。 A 的虚拟机组是 192.168.30.0/24, 网关 192.168.30.1; 网口 IP 192.168.15.2 B 的虚拟机组是 192.168.20.0/24, 网关 192.168.20.1; 网口 IP 192.168.15.1 我觉得是 B 的路由转发设置因为公司策略无法生效, 要不然没道理从 A 出来的去往 192.168.20.0/24 的请求会超时, 但反过来不会。。。 |
20
cpstar 2020-12-23 09:30:17 +08:00 1
@flamhaze5946 19# trace 一下呢?我觉得你公司的网络应该不会限制这个东西,除非限制了 icmp 包,如果 15.2 与 15.1 直接连接,那公司网络根本不会产生影响。
这么判断一下,用 30.x 的去 ping 20.x 的,看数据包有没有达到 15.1,可以在 15.1 上 tcpdump 拦包,甚至尝试发起 tcp 连接(有可能交换机禁止了 icmp ) if 收到 > B 上没有实现路由转发 > 继续在 20.1 上做拦包以确认没有实现转发 else if 没收到 > A 上没有实现路由转发 > 在 15.2 上拦包以确认没有实现转发 反向 20.x->30.x 如果问题类似,则在 15.2 上拦包做类似工作 |
21
flamhaze5946 OP @cpstar
公司机器禁止了 ICMP 协议的包处理, 但是 A 可以访问到 B 上启的 HTTP 服务, 所以请求肯定是到了 15.1 的, 但是 ping 192.168.20.0/24 虚拟机是 ping 不通的, 所以我认为是路由转发功能也被禁止了, 不知道有没有什么方法看路由的转发过程. A 是有路由转发的, 因为 B 可以 ping 通 A 上的虚拟机. |
22
cpstar 2020-12-23 10:36:08 +08:00 1
ICMP 被禁了,那还 ping 个什么劲。但 B 能到 A-sub 的 ping,那你说的不对,ICMP 没有被禁用。到底是啥??
B 上的 HTTP 服务,我理解应该指的是 B 上本机启动的 HTTP,或者 15.1 做的 NAT 转换出 20.x 的 HTTP 。所以,数据包只到达了 15.1,而没有继续往里走。所以还是 B 上没有启动数据包转发。 A-sub --o--> A --o--> B --x--> B-sub,问题出在哪还不明显么? |
23
flamhaze5946 OP @cpstar
B 被禁止相应 ICMP 的请求, 所以 B 能 ping 通 A, 但是 A 不能 ping 通 B 是的, 虽然我设置了 forwarding=1, 但是转发仍然没有生效. 所以我现在给 A 加了个 NAT 网关, 每个虚拟机都有两张网卡, 一张用来管理, 一张用来上网, 目前是解决了... |
24
flamhaze5946 OP |