OpenVPN 客户机怎么访问主机 NAT 后面的虚拟服务器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lry
V2EX    服务器

OpenVPN 客户机怎么访问主机 NAT 后面的虚拟服务器

  •  
  •   lry 2021-02-07 12:46:48 +08:00 4662 次点击
    这是一个创建于 1706 天前的主题,其中的信息可能已经有所发展或是发生改变。

    路由器直接分配的网段是 192.168.0.0/24

    主机 192.168.0.108 安装了几台 Vmware 虚拟机,网络模式为 NAT 虚拟机网段为 192.168.204.0/24 (主机 192.168.204.1,虚拟机 192.168.204.10-20 )

    现在怎么才能让主机同路由器下的其他客户机(假设 192.168.0.107 )可以访问主机服务器上的虚拟机

    我在主机上安装了 OpenVPN 服务器,主机中的虚拟机中可以 telnet 连上客户机,但是客户机只能脸上主机,连不上主机上的虚拟机

    photo_2021-02-07_12-37-26.jpg

    附上 server.ovpn 和 client.ovpn

    port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.204.0 255.255.255.0" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 114.114.114.114" keepalive 10 120 cipher AES-256-CBC persist-key persist-tun status openvpn-status.log log-append openvpn.log verb 3 explicit-exit-notify 1 
    client dev tun proto udp remote 192.168.0.108 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key cipher AES-256-CBC verb 3 
    30 条回复    2023-04-14 22:17:58 +08:00
    UnknownSky
        1
    UnknownSky  
       2021-02-07 12:49:54 +08:00 via Android
    正好前段有方面的研究,考接,有用。Iptables 就解了。
    UnknownSky
        2
    UnknownSky  
       2021-02-07 12:50:42 +08:00 via Android
    你的意思就是 Openvpn clients 暴露出嘛
    UnknownSky
        4
    UnknownSky  
       2021-02-07 12:51:34 +08:00 via Android
    UnknownSky
        5
    UnknownSky  
       2021-02-07 12:52:23 +08:00 via Android
    有方法, FullconeNAT Kernel module,和 iptables,直接 server Fullcone
    lry
        6
    lry  
    OP   2021-02-07 12:58:14 +08:00
    @UnknownSky 我的目的是让 NAT 后面的虚拟机暴漏出来,这样同局域网下的其他机器可以连上去。
    lry
        7
    lry  
    OP
       2021-02-07 13:01:06 +08:00
    @UnknownSky 端口转发可以,但是这样就得为每一台虚拟机配置一个端口转发了,我觉得用 OpenVPN 也可以实现这个效果,而且不用记住虚拟机配置的端口转发,直接使用虚拟机 ip 。(谁要连主机上的虚拟机,就直接装个 OpenVPN 的客户端,但是我这配置好像有问题,连不上)
    XiaoxiaoPu
        8
    XiaoxiaoPu  
       2021-02-07 13:04:10 +08:00
    在主机上抓包看看。
    看你的 server 配置,把虚拟机所在网络的路由推送给了客户端,那么客户端到虚拟机的包应该会正确的发给主机,那问题应该就是主机没有转发给虚拟机,或者虚拟机的响应没有转发给客户端。猜测可能跟 VMware 的 NAT 模式下的网络限制有关(比如防火墙等)。所以先定位下具体哪里没走下去吧。
    XiaoxiaoPu
        9
    XiaoxiaoPu  
       2021-02-07 13:05:02 +08:00
    另外有个疑问,如你所说,客户端和服务端在一个路由器下,已经在一个子网里了,就应该不需要再连 vpn 了,连 vpn 的需求是啥?
    lry
        10
    lry  
    OP
       2021-02-07 13:08:57 +08:00
    @XiaoxiaoPu 客户端可以直接连服务端没问题,但是服务端上的虚拟机用的 NAT 模式(装的时候未选择桥接模式),客户端和虚拟机不在同一个网段。
    JmmBite
        11
    JmmBite  
       2021-02-07 13:14:59 +08:00
    先理解什么是 NAT:
    局域网访问互联网,经过 NAT 转换肯定没问题,
    那你认为互联网主机可以逆向访问局域网主机吗?肯定不行。
    如果要实现,那就还需要 外网到内网的 入口 NAT ;
    XiaoxiaoPu
        12
    XiaoxiaoPu  
       2021-02-07 13:21:22 +08:00
    @lry 所谓的网段,影响的无非就是路由。在客户端上加一条 "192.168.204.0/24 via 192.168.0.108 dev eth0" 这样的路由,也能让客户端就知道发给虚拟机的包要交给主机来转发。

    不过这两种方法都是可行的,都能实现让主机作为通信的中转节点。问题关键还是 VMware 的 NAT 是否有防火墙策略。分步排查吧:客户端 -> 主机 -> 虚拟机 -> (回应) -> 主机 -> 客户端,看看链路在哪一步断掉了。
    JmmBite
        13
    JmmBite  
       2021-02-07 13:27:19 +08:00
    所谓 NAT 就是通过软件把主机当路由器,NAT 后面的虚拟机网络就是一个小型局域网。
    所谓 桥接 就是通过软件把主机当成交换机,虚拟机直接暴露给外网。

    如果是双向 NAT (路由转发),那就是 桥接(交换机)的功能了。
    cctv6
        14
    cctv6  
       2021-02-07 13:51:13 +08:00 via Android
    如果跨 IP 网段,数据包就需要先把数据包转发给网关(路由器),然后由路由器判断下一跳去哪。所以你要在路由器上检查一下发往虚拟机的包发去哪里了,(一般路由器默认只有一个指向 wan 口的默认路由,不会有 vmware 定义的路由,所以数据包就直接从默认的 wan 口发走了)

    你可以在路由器再加一个路由指向 vmware 的虚拟机,将发往虚拟机网段的数据包先转发给 vmware 。

    最后在 vmware 上再转发给虚拟机。
    cctv6
        15
    cctv6  
       2021-02-07 14:06:02 +08:00 via Android
    现在就是不确定的是,vmware 能不能把包正常转发给内部的虚拟机,这个没验证过。

    我自己测试过 kvm 的 router 网络,是可以访问的虚拟机的。kvm 的 router 网络和 nat 应该差不太多。
    lry
        16
    lry  
    OP
       2021-02-07 14:11:31 +08:00
    @XiaoxiaoPu
    @cdlnls 我撤去了 OpenVPN,直接在客户机上面加了一条静态路由 `sudo route -n add -net 192.168.204.0 -netmask 255.255.255.0 192.168.0.108`,同时抓包服务器上的以太网卡和 Vmware 的 nat 网卡,发现客户机 telnet 虚拟机的 tcp 包第一次握手就收不到 ack,但是 虚拟机 telnet 客户机的包连接正常。这种一般会是什么问题

    图 1: 192.168.0.107 --> 192.168.204.10
    https://i.loli.net/2021/02/07/UrbXvO9En2764lH.png
    图 2: 192.168.204.10 --> 192.168.0.107
    https://i.loli.net/2021/02/07/zIPnVkiY2758THE.png
    cctv6
        17
    cctv6  
       2021-02-07 14:22:29 +08:00 via Android
    @lry 看看客户机的路由表,和对应的虚拟的网络接口。
    你这个不应该是这样加的,可能要指定一下接口
    XiaoxiaoPu
        18
    XiaoxiaoPu  
       2021-02-07 14:42:02 +08:00
    客户机加的路由应该要指定网卡的。我一般用 ip 命令,不用 route 命令,这样试试 “sudo ip route replace 192.168.204.0/24 via 192.168.0.108 dev eth0”。eth0 是客户机的网卡名称,如果不是 eth0 需要替换下。然后可以在客户机上执行“sudo ip route show” 看下当前路由是否符合预期。


    主机的防火墙策略也看一下,在主机上执行 “sudo iptables-save” 查看。
    ourgoder
        19
    ourgoder  
       2021-02-07 14:53:33 +08:00
    我也类似 25,很多也不动
    lry
        20
    lry  
    OP
       2021-02-07 15:14:25 +08:00
    @cdlnls @ourgoder 我这边客户机是 MacOS,主机是 Win10,虚拟机才是 Debian
    贴了下客户机上面的路由,感觉这个路由没有问题
    https://paste.ubuntu.com/p/FxNdJV2n3X/
    XiaoxiaoPu
        21
    XiaoxiaoPu  
       2021-02-07 15:21:38 +08:00
    windows 啊,那不了解了。

    干脆一把梭吧,客户端跟虚拟机都连 vpn 里,通过 vpn 的网段通信 = =
    ourgoder
        22
    ourgoder  
       2021-02-07 18:00:04 +08:00
    @lry #20 我试试哦
    fzinfz
        23
    fzinfz  
       2021-02-08 19:23:21 +08:00
    vmware 改 bridge 模式

    https://docs.vmware.com/en/VMware-Workstation-Pro/16.0/com.vmware.ws.using.doc/GUID-3B504F2F-7A0B-415F-AE01-62363A95D052.html

    With NAT, the virtual machine and the host system share a single network identity that is not visible outside the network.
    fzinfz
        24
    fzinfz  
       2021-02-08 19:29:16 +08:00
    收回#23 回复,貌似 NAT 支持 Port Forwarding: (多年未用 VMware-Workstation,仅纸上谈兵,逃~ )

    https://docs.vmware.com/en/VMware-Workstation-Pro/15.0/com.vmware.ws.using.doc/GUID-E146C894-664C-479A-9E19-484400614BED.html
    lry
        25
    lry  
    OP
       2021-02-09 00:38:34 +08:00
    @cdlnls @XiaoxiaoPu
    这个问题解决了。如果 openvpn 用的路由模式 (dev tun),需要 win10 服务器上开启端口转发,并且在虚拟机里面添加一条静态路由( route add -net 10.8.0.0/24 gw 192.168.204.1 )
    或者使用 openvpn 的桥接模式( dev tap ),将 openvpn 的 Tap-Windows Adapter V9 虚拟网卡和 VMware 的 Vment8 NAT 虚拟网卡桥接下
    lry
        26
    lry  
    OP
       2021-02-09 00:40:20 +08:00
    @lry #25 说错了,应该叫路由转发。https://www.jianshu.com/p/3d5ada946a31
    lry
        27
    lry  
    OP
       2021-02-09 00:40:56 +08:00
    @fzinfz 是的,这个可以,综上所述,我觉得还是 openvpn 的桥接模式方便点,不需要一个个配置
    LLaMA2
        28
    LLaMA2  
       2021-06-11 11:07:39 +08:00
    3 种方案。
    1.VMWARE 网卡开 briage 模式
    2.确保 windows 防火墙策略得当的情况下在虚拟器和 0.107 上使用 wireguard
    3.0.108 宿主主机做端口转发 netsh interface portproxy add v4tov4 listenaddress=192.168.0.108 listenport=xxx cOnnectaddress=192.168.204.2 cOnnectport=xxx
    e135
        29
    e135  
       2023-04-13 16:21:47 +08:00
    @lry 好兄弟,我现在也遇到了和你意义的问题,想问一下,当时你的具体解决方案,不太理解两个虚拟网卡怎么桥接的,感谢感谢
    lry
        30
    lry  
    OP
       2023-04-14 22:17:58 +08:00
    @e135 抱歉。。忘记了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3609 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 00:47 PVG 08:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86