You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linux虚拟机保持NAT/共享网络模式下访问主机所在局域网的192.168.x.y地址

如何在Linux虚拟机保持NAT/共享网络模式下访问主机所在局域网的192.168.x.y地址

我之前也碰到过和你一模一样的场景——Mac主机在192.168网段的局域网里,Ubuntu VM用NAT模式,只能通过10.0.2.2访问主机,但单个端口转发经常碰到端口冲突的问题。下面是我试过的几种靠谱方法,你可以根据需求选:

方法一:配置路由表实现全网段访问(最彻底的方案)

这种方法能让VM直接访问整个192.168.x.y网段,不用再逐个端口映射,完美解决端口冲突问题。

步骤1:开启Mac主机的IP转发功能

首先得让Mac允许转发VM过来的流量到局域网,打开Mac的终端执行:

sudo sysctl -w net.inet.ip.forwarding=1

如果想要重启后依然生效,编辑/etc/sysctl.conf文件,添加一行:

net.inet.ip.forwarding=1

步骤2:在Ubuntu VM里添加路由规则

在VM的终端里,先确认你的网卡名称(比如eth0ens33,可以用ip a命令查看),然后执行:

sudo ip route add 192.168.0.0/16 via 10.0.2.2 dev eth0

这条命令的意思是:所有发往192.168.0.0/16网段的流量,都通过10.0.2.2(也就是Mac主机在VM里的IP)转发出去。

如果想要VM重启后路由规则依然存在,可以把这条命令加到/etc/rc.local文件里(Ubuntu 22.04可能需要先启用rc-local服务),或者用netplan配置静态路由。

方法二:用动态SOCKS代理访问多端口服务

如果只是临时需要访问多个不同端口的设备,不想改路由的话,可以用SSH的动态端口转发,相当于在VM里搭个SOCKS代理:

步骤1:建立动态转发隧道

在VM终端执行:

ssh -N -D 1080 user@10.0.2.2

这里-D 1080表示在本地1080端口开启SOCKS代理,-N表示只建立连接不执行远程命令。

步骤2:配置应用或系统使用代理

  • 单个应用:比如浏览器,可以在设置里手动添加SOCKS5代理,地址填localhost,端口1080
  • 系统级或命令行工具:可以安装proxychains4工具,编辑/etc/proxychains.conf,把默认的socks4 127.0.0.1 9050改成socks5 127.0.0.1 1080,然后运行命令时加前缀,比如:
proxychains4 ping 192.168.x.y
proxychains4 curl http://192.168.x.y:8080

方法三:虚拟机软件自带的端口转发(适合单端口场景)

如果你还是想用端口转发但避免冲突,可以直接用VirtualBox/VMware这类虚拟机软件自带的端口转发功能,比SSH转发更稳定:

  • 以VirtualBox为例:打开VM的设置→网络→高级→端口转发,添加一条规则,协议选TCP/UDP,主机端口选一个没被占用的(比如9101),子系统IP填目标打印机的192.168.x.y地址,子系统端口填9100,这样VM里访问localhost:9101就相当于访问打印机的9100端口了。

备注:内容来源于stack exchange,提问作者user513667

火山引擎 最新活动