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

2021-02-07 12:46:48 +08:00
 lry

路由器直接分配的网段是 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 连上客户机,但是客户机只能脸上主机,连不上主机上的虚拟机

附上 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
4097 次点击
所在节点    服务器
30 条回复
UnknownSky
2021-02-07 12:49:54 +08:00
正好前段時間有這方面的研究,給個參考鏈接,實測有用。Iptables 就解決了。
UnknownSky
2021-02-07 12:50:42 +08:00
你的意思就是說 Openvpn clients 暴露出來嘛
UnknownSky
2021-02-07 12:51:12 +08:00
UnknownSky
2021-02-07 12:51:34 +08:00
UnknownSky
2021-02-07 12:52:23 +08:00
還有個方法,編譯 FullconeNAT Kernel module,和 iptables,直接實現 server Fullcone
lry
2021-02-07 12:58:14 +08:00
@UnknownSky 我的目的是让 NAT 后面的虚拟机暴漏出来,这样同局域网下的其他机器可以连上去。
lry
2021-02-07 13:01:06 +08:00
@UnknownSky 端口转发可以,但是这样就得为每一台虚拟机配置一个端口转发了,我觉得用 OpenVPN 也可以实现这个效果,而且不用记住虚拟机配置的端口转发,直接使用虚拟机 ip 。(谁要连主机上的虚拟机,就直接装个 OpenVPN 的客户端,但是我这配置好像有问题,连不上)
XiaoxiaoPu
2021-02-07 13:04:10 +08:00
在主机上抓包看看。
看你的 server 配置,把虚拟机所在网络的路由推送给了客户端,那么客户端到虚拟机的包应该会正确的发给主机,那问题应该就是主机没有转发给虚拟机,或者虚拟机的响应没有转发给客户端。猜测可能跟 VMware 的 NAT 模式下的网络限制有关(比如防火墙等)。所以先定位下具体哪里没走下去吧。
XiaoxiaoPu
2021-02-07 13:05:02 +08:00
另外有个疑问,如你所说,客户端和服务端在一个路由器下,已经在一个子网里了,就应该不需要再连 vpn 了,连 vpn 的需求是啥?
lry
2021-02-07 13:08:57 +08:00
@XiaoxiaoPu 客户端可以直接连服务端没问题,但是服务端上的虚拟机用的 NAT 模式(装的时候未选择桥接模式),客户端和虚拟机不在同一个网段。
JmmBite
2021-02-07 13:14:59 +08:00
先理解什么是 NAT:
局域网访问互联网,经过 NAT 转换肯定没问题,
那你认为互联网主机可以逆向访问局域网主机吗?肯定不行。
如果要实现,那就还需要 外网到内网的 入口 NAT ;
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
2021-02-07 13:27:19 +08:00
所谓 NAT 就是通过软件把主机当路由器,NAT 后面的虚拟机网络就是一个小型局域网。
所谓 桥接 就是通过软件把主机当成交换机,虚拟机直接暴露给外网。

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

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

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

我自己测试过 kvm 的 router 网络,是可以访问的虚拟机的。kvm 的 router 网络和 nat 应该差不太多。
lry
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
cdlnls
2021-02-07 14:22:29 +08:00
@lry 看看客户机的路由表,和对应的虚拟的网络接口。
你这个不应该是这样加的,可能要指定一下接口
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
2021-02-07 14:53:33 +08:00
我也类似 25,很多也不动
lry
2021-02-07 15:14:25 +08:00
@cdlnls @ourgoder 我这边客户机是 MacOS,主机是 Win10,虚拟机才是 Debian
贴了下客户机上面的路由,感觉这个路由没有问题 😂
https://paste.ubuntu.com/p/FxNdJV2n3X/

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

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

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

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

© 2021 V2EX