V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
flamhaze5946
V2EX  ›  宽带症候群

请教一个如何配置局域网固定机器与虚拟机互访的问题

  •  
  •   flamhaze5946 · 2020-12-21 11:05:26 +08:00 · 2427 次点击
    这是一个创建于 1468 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有两台物理机 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 条附言  ·  2020-12-21 14:45:31 +08:00

    网上找到个图, 和我这种情况比较匹配, 大家可以参考一下. img

    第 2 条附言  ·  2020-12-22 10:04:53 +08:00
    非常感谢大家, 昨天晚上我将宿主机的软路由功能打开就成功了.
    实际上原来从外部机器过来的 ping 已经到了宿主机的 192.168.15.2 网卡, 只是缺少了软路由功能的系统无法将这个网卡的数据包转发到 192.168.20.1 上....
    24 条回复    2020-12-24 11:48:45 +08:00
    Tianao
        1
    Tianao  
       2020-12-21 11:17:31 +08:00 via iPhone   ❤️ 1
    能 ping 通证明双向路由都没问题,建议检查防火墙配置是否响应 ICMP Echo request 或者先行以 192.168.20.1 作为源地址 ping 同段虚机测试。
    flamhaze5946
        2
    flamhaze5946  
    OP
       2020-12-21 11:23:29 +08:00
    @Tianao
    我把防火墙中的 ICMP 拦截都关闭了.
    A 和 B 在 192.168.15.0/24 能互相 ping 通的, 同时宿主机 A 也能 ping 通虚拟机.
    但是 B 不能 ping 通 A 的 192.168.20.1 地址, 也不能 ping 通 A 中的虚拟机.
    Tianao
        3
    Tianao  
       2020-12-21 11:28:51 +08:00 via iPhone   ❤️ 1
    B 上路由跟踪一下 192.168.20.1 看看?
    flamhaze5946
        4
    flamhaze5946  
    OP
       2020-12-21 11:57:59 +08:00
    @Tianao B 上使用 tracert 显示的是 * * * 超时
    Tianao
        5
    Tianao  
       2020-12-21 12:36:13 +08:00 via iPhone   ❤️ 1
    第一跳是 192.168.15.2 并且显示 *?是不是 Hyper-V 给虚机网络做了源 NAT ?
    ungrown
        6
    ungrown  
       2020-12-21 13:08:23 +08:00   ❤️ 1
    初步感觉是 NAT +1
    flamhaze5946
        7
    flamhaze5946  
    OP
       2020-12-21 13:58:46 +08:00
    @Tianao
    第一跳没有显示 192.168.15.2, 而是直接显示的 * * * 超时
    这张网卡是 Hyper-V 创建出来的虚拟网卡, 要怎么看是不是源 NAT 呢?
    flamhaze5946
        8
    flamhaze5946  
    OP
       2020-12-21 13:59:43 +08:00
    @ungrown
    可以详细说说吗, 我一个周末都还没弄好 = =
    谢谢
    zerohzd
        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
    sujin190
        10
    sujin190  
       2020-12-21 18:01:14 +08:00   ❤️ 1
    Hyper-V 安装的虚拟机默认使用的内部网络是 nat 模式吧,外部 ping 肯定 ping 不通啊,你应该改为外部网络使用 A 的物理网卡,然后内部主机就能获取到 192.168.15.0/24 的地址了吧,和 B 在同一个网络肯定就可以 ping 通了
    sujin190
        11
    sujin190  
       2020-12-21 18:02:18 +08:00   ❤️ 1
    nat 模式下想访问内部主机需要端口转发的吧,但是 windows 的端口转发似乎不是很好设置
    cpstar
        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 上

    以上仅就图片内容论述,文字内容跟图片好像对不上,懒得仔细看了
    flamhaze5946
        13
    flamhaze5946  
    OP
       2020-12-22 10:00:57 +08:00
    @zerohzd
    好的, 不过虚拟机不能用 192.168.15.0/24, 因为这个网卡一旦没有插线会丢失 IP, 不能做网关.
    flamhaze5946
        14
    flamhaze5946  
    OP
       2020-12-22 10:02:19 +08:00
    @sujin190
    不能使用物理网卡, 因为虚拟机内部通信不能断, 需要一个可靠的网关, 物理网卡一旦没有连接外部设备就会失去做网关的资格...
    flamhaze5946
        15
    flamhaze5946  
    OP
       2020-12-22 10:03:06 +08:00
    @cpstar
    正解, 昨天晚上我打开了宿主机的软路由功能, 然后就通了 = =
    flamhaze5946
        16
    flamhaze5946  
    OP
       2020-12-22 15:45:08 +08:00
    @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 上呢, 如果要正确添加路由应该用什么命令...谢谢~
    flamhaze5946
        17
    flamhaze5946  
    OP
       2020-12-22 16:28:06 +08:00
    @cpstar
    又试了下, 不加-link 就不会出现网络问题, 我也忘了是哪里看到的加一个-link 了, 是为了指定网卡...
    cpstar
        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
    我的理解对么?
    flamhaze5946
        19
    flamhaze5946  
    OP
       2020-12-22 21:50:15 +08:00
    @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 的请求会超时, 但反过来不会。。。
    cpstar
        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 上拦包做类似工作
    flamhaze5946
        21
    flamhaze5946  
    OP
       2020-12-23 10:15:38 +08:00
    @cpstar
    公司机器禁止了 ICMP 协议的包处理, 但是 A 可以访问到 B 上启的 HTTP 服务, 所以请求肯定是到了 15.1 的, 但是 ping 192.168.20.0/24 虚拟机是 ping 不通的, 所以我认为是路由转发功能也被禁止了, 不知道有没有什么方法看路由的转发过程.

    A 是有路由转发的, 因为 B 可以 ping 通 A 上的虚拟机.
    cpstar
        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,问题出在哪还不明显么?
    flamhaze5946
        23
    flamhaze5946  
    OP
       2020-12-24 11:48:10 +08:00
    @cpstar
    B 被禁止相应 ICMP 的请求, 所以 B 能 ping 通 A, 但是 A 不能 ping 通 B

    是的, 虽然我设置了 forwarding=1, 但是转发仍然没有生效.

    所以我现在给 A 加了个 NAT 网关, 每个虚拟机都有两张网卡, 一张用来管理, 一张用来上网, 目前是解决了...
    flamhaze5946
        24
    flamhaze5946  
    OP
       2020-12-24 11:48:45 +08:00
    @flamhaze5946

    相应 -> 响应
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1531 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:02 · PVG 01:02 · LAX 09:02 · JFK 12:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.