Total Pageviews

5,404,513

Monday, 26 August 2024

Custom NAT Gateway and DNS for VMware Fusion



由于电脑使用了 Surge 并开启了 Enhanced Mode 来做全局透明代理,现在希望 VMware Fusion 的虚拟机也自动使用这个代理。其实打开 Enhanced Mode 之后无需配置虚拟机即可直接享受透明代理的。但是这样在 Surge Dashboard 中看到的所有连接都是来源于 vmnet-natd 这个进程,十分不方便监控。

为此,可以手动在虚拟机中修改网关和 DNS 服务器来使 Surge 能够分辨出流量来自哪台虚拟机。但这在我的场景下还是有点麻烦,因为需要不停的重装虚拟机等操作,每一次都需要重新配置。本文将介绍如何修改 VMware Fusion 的 vmnet-dhcpd 配置文件来使虚拟机自动获取自定义的网关和 DNS 服务器。

Modify dhcpd.conf

此处假定需要修改的是默认 NAT 虚拟网络的配置,即 vmnet8 其它自定义网络同理(桥接除外)。配置文件位于 /Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf ,里面的内容主体如下:

###### VMNET DHCP Configuration. Start of "DO NOT MODIFY SECTION" #####
# ...

# Written at: 02/22/2020 01:40:51
allow unknown-clients;
default-lease-time 1800;                # default is 30 minutes
max-lease-time 7200;                    # default is 2 hours

subnet 172.16.69.0 netmask 255.255.255.0 {
    ...
    option domain-name-servers 172.16.69.2;
    ...
    option routers 172.16.69.2;
}
...
####### VMNET DHCP Configuration. End of "DO NOT MODIFY SECTION" #######

注意其中被 DO NOT MODIFY SECTION 包起来的部分,这一部分信息是根据 /Library/Preferences/VMware Fusion/networking 自动生成的,如子网网段等配置,而我需要修改的是其中 domain-name-servers 和 routers 两个 networking 文件中无法配置的选项。因此,我们需要在这个 section 之后复制一段 subnet 的配置,将其中的两个选项改成自定义的值即可:

###### VMNET DHCP Configuration. Start of "DO NOT MODIFY SECTION" #####
# ...

# Written at: 02/22/2020 01:40:51
allow unknown-clients;
default-lease-time 1800;                # default is 30 minutes
max-lease-time 7200;                    # default is 2 hours

subnet 172.16.69.0 netmask 255.255.255.0 {
    ...
    option domain-name-servers 172.16.69.2;
    ...
    option routers 172.16.69.2;
}
...
####### VMNET DHCP Configuration. End of "DO NOT MODIFY SECTION" #######
subnet 172.16.69.0 netmask 255.255.255.0 {
    ...
    option domain-name-servers 198.18.0.2;
    ...
    option routers 172.16.69.1;
}

这样一来,在 VMware Fusion 重启之后改配置也将得到保留,且会覆盖其自动生成的 subnet 配置。注意若之后通过任何方式修改了 vmnet8 的 DHCP 子网网段,此处也需要手动修改。

Reconfigure Virtual Network

接下来需要重启 vmnet-dhcpd 使配置生效,这需要借助 VMware Fusion 自带的 vmnet-cli 工具。如果 Fusion 是通过 brew cask 安装的 ,那么它已经被软链接到 PATH 之中了;否则可以在 /Applications/VMware Fusion.app/Contents/Library/vmnet-cli 找到它。

依次执行如下命令即可:

# alias vmnet-cli='/Applications/VMware Fusion.app/Contents/Library/vmnet-cli'
sudo vmnet-cli --stop
sudo vmnet-cli --configure
sudo vmnet-cli --start

至此,在虚拟机中禁用再开启相应网卡,即可自动获取新的配置了。

No comments:

Post a Comment