五、配置NAT模式 5.1、NAT模式 当您将 Workstation Pro 安装到 Windows 或 Linux 主机系统时,系统会设置一个 NAT 模式网络 (VMnet8)。在您使用新建虚拟机向导创建典型虚拟机时,该向导会将虚拟机配置为使用默认 NAT 模式网络。 使用 NAT 模式网络时,虚拟机在外部网络中不必具有自己的 IP 地址。主机系统上会建立单独的专用网络。在默认配置中,虚拟机会在此专用网络中通过 DHCP 服务器获取地址。 NAT 配置 虚拟机和主机系统共享一个网络标识,此标识在外部网络中不可见。NAT 工作时会将虚拟机在专用网络中的 IP 地址转换为主机系统的 IP 地址。当虚拟机发送对网络资源的访问请求时,它会充当网络资源,就像请求来自主机系统一样。 主机系统在 NAT 网络上具有虚拟网络适配器。借助该适配器,主机系统可以与虚拟机相互通信。NAT 设备可在一个或多个虚拟机与外部网络之间传送网络数据,识别用于每个虚拟机的传入数据包,并将它们发送到正确的目的地。 5.2、NAT 配置的功能和限制 当 IP 地址数量有限或主机系统通过非以太网适配器连接网络时,NAT 将非常有用。 使用 NAT 时,虚拟机可采用很多标准 TCP/IP 协议连接到外部网络中的其他计算机。例如,您可以用 HTTP 浏览 Web 站点,用 FTP 传输文件,用 Telnet 登录其他计算机。也可以使用主机系统上的令牌环适配器连接 TCP/IP 网络。NAT 支持以太网、DSL 和电话调制解调器。 在默认的 NAT 配置中,外部网络中的计算机无法发起对虚拟机的连接。例如,您无法将虚拟机用作 Web 服务器向外部网络中的计算机发送 Web 页面。该功能用于保护客户机操作系统,使之在用户安装安全软件前免受威胁。 NAT 配置具有以下额外功能和限制。
- NAT 可导致一些性能损失。由于 NAT 要求每个在虚拟机中收发的数据包必须位于 NAT 网络,因此会造成无法避免的性能损失。
- NAT 并不完全透明。尽管您可以手动配置 NAT 设备来建立服务器连接,但 NAT 通常不允许从网络外部发起连接。在实际环境中,这会导致一部分需要从服务器计算机发起连接的 TCP 和 UDP 协议无法自动运行或根本不运行。
- NAT 能提供一些防火墙保护。标准 NAT 配置能提供基本的防火墙保护功能,因为 NAT 设备可以从专用 NAT 网络发起连接,但外部网络上的设备通常无法发起对专用 NAT 网络的连接。
5.2.1 了解 NAT 配置中的 DHCP 在 NAT 配置中,在具有 NAT 设备的网络上运行的虚拟机可以发送 DHCP 请求以动态获取其 IP 地址。 在默认配置中,虚拟 DHCP 服务器动态分配 net.128 到 net.254 范围内的 IP 地址,其中 net 是为 NAT 模式网络分配的网络编号。Workstation Pro 始终在 NAT 模式网络中使用 C 类地址。可以将网络.3 到 网 络.127 之间的 IP 地址用于静态 IP 地址。IP 地址“net.1”是为主机虚拟网络适配器预留的,net.2 是为 NAT 设备预留的。 除了 IP 地址以外,NAT 模式网络上的虚拟 DHCP 服务器还会发出虚拟机正常运行所需的配置信息。这些 信息包括默认网关和 DNS 服务器信息。在 DHCP 响应中,NAT 设备通知虚拟机使用 IP 地址 net.2 以作 为默认网关和 DNS 服务器。这种路由方式导致将所有发往外部网络的 IP 数据包和 DNS 请求转发到 NAT 设备。 5.2.2 了解 NAT 设备 NAT 设备连接到 VMnet8 虚拟交换机。连接到 NAT 网络的虚拟机也会使用 VMnet8 虚拟交换机。 NAT 设备会等待 VMnet8 虚拟网络中的虚拟机发出的数据包。当数据包抵达时,NAT 设备会将虚拟机地 址转换为主机系统的地址,然后再将数据包转发到外部网络。 当数据从专用网络虚拟机的外部网络送达时,NAT 设备会接收数据,将网络地址替换为虚拟机地址,然后 将数据转发到虚拟网络的虚拟机中。这种转换会自动进行,只需对客户机操作系统和主机系统进行少量配 置即可。 NAT 设备属于 DNS 代理,可将 DNS 请求从虚拟机转发到主机系统已经识别的 DNS 服务器。响应信息会 返回 NAT 设备,然后被转发到虚拟机中。 如果它们是从虚拟 DHCP 服务器获得配置信息,NAT 网络上的虚拟机将使用 NAT 设备作为 DNS 服务 器。专用 NAT 网络中的虚拟机无法通过 DNS 访问。要让 NAT 网络上运行的虚拟机按照 DNS 名称相互 访问,您必须设置一个连接到 NAT 网络的专用 DNS 服务器并将虚拟机配置为使用 DNS 服务器。 5.2.3 从 NAT 网络访问外部网络 对于 Web 浏览器、Telnet、被动模式 FTP 和下载的流视频等大部分客户端应用程序来说,NAT 网络上 的虚拟机可以使用任何基于 TCP 或 UDP 的协议,只要网络连接是由该虚拟机发起即可。其他协议支持已 被内置到 NAT 设备,以便 FTP 和 ICMP 回显 (ping) 能通过 NAT 设备透明运行。 在外部网络中,位于 NAT 网络的虚拟机会显示为主机系统,因为其网络流量使用了主机系统的 IP 地址。 虚拟机可以使用 TCP/IP 协议,面向任何可从主机系统访问的计算机收发数据。 在开始通信前,NAT 设备必须在专用 NAT 网络的虚拟机地址和外部网络的主机网络地址之间建立映射。 当虚拟机向其他网络资源发起网络连接时,系统会自动创建该映射。此操作对于 NAT 网络虚拟机的用户来 说是透明的。 从 NAT 网络外部向 NAT 网络虚拟机发起的网络连接则不是透明的。当外部网络中的计算机尝试发起对 NAT 网络虚拟机的连接时,它将无法访问该虚拟机,因为 NAT 设备并不会转发请求。您可以在 NAT 设 备上手动配置端口转发,以便指向特定端口的网络流量仍然能被自动转发到 NAT 网络虚拟机。 Windows 操作系统和 Samba 所使用的文件共享也可以在 NAT 网络计算机(包括虚拟机和主机系统)中 实现。如果您在网络中使用 WINS 服务器,使用 NAT 模式网络连接的虚拟机可以访问 WINS 服务器已经 识别的主机系统上的共享文件和文件夹,前提是这些共享文件和文件夹处在相同的工作组或域中。 5.3、更改 NAT 设置 您可以更改网关 IP 地址、配置端口转发,以及配置 NAT 网络的高级网络设置。 前提条件
- 在 Windows 主机上,以 Administrator 用户身份登录。仅 Administrator 用户可以在虚拟网络编辑器中更改网络设置。
- 在 Linux 主机上,以 root 身份登录。必须输入 root 密码才能使用虚拟网络编辑器。
过程
- 在主机系统上启动虚拟网络编辑器。
选项 |
说明 |
Windows 主机 |
选择编辑 > 虚拟网络编辑器。 |
Linux 主机 |
选择应用程序 > 系统工具 > 虚拟网络编辑器。对于您的 Linux 版本,菜单路径可能会略有不同。您也可以从命令行界面中使用 vmware-netcfg 命令启动网络编辑器。 |
- 选择 NAT 网络,然后单击 NAT 设置。
默认情况下,NAT 设备会连接到 VMnet8 虚拟交换机。您只能有一个 NAT 虚拟网络。
设置 |
说明 |
网关 IP |
所选网络的网关 IP 地址。 |
端口转发 |
添加用于端口转发的端口。启用端口转发后,传入 TCP 或 UDP 请求会被发送至由 NAT 设备提供服务的虚拟网络中的特定虚拟机。 主机端口 传入 TCP 或 UDP 端口的端口号。例如,传入 HTTP 请求通常使用端口 80。 虚拟机 IP 地址 您要将传入请求转发到的虚拟机的 IP 地址。 虚拟机端口 特定虚拟机上用于处理请求的端口号。这可能是标准端口(例如 HTTP 端口 80),也可能是非标准端口(如果虚拟机中运行的软件配置为接受非标准端口上的请求)。 说明 (可选)您可以使用此文本框标识转发服务,如 HTTP。 要更改现有端口的设置,请选择其名称,然后单击属性。 |
允许活动的 FTP |
仅允许经由 NAT 设备使用被动模式 FTP。 |
允许任何组织唯一标识符 |
如果您更改虚拟机 MAC 地址的组织内唯一标识符 (OUI) 部分,并因此导致 NAT 无法与虚拟机一起使用,请选择此设置。 |
UDP 超时 (以秒为单位) |
选择为 NAT 保持 UDP 映射的分钟数。 |
配置端口 |
选择用于访问 NAT 状态信息的端口。 重要说明:只有在 VMware 技术支持人员的指导下方可更改此值。 |
启用 IPv6 |
启用 NAT 以使用 IPv6 地址。 |
IPv6 前缀 |
如果已启用 IPv6,请输入 NAT 设备使用的 IPv6 前缀。 |
DNS 设置 |
(仅限 Windows 主机)配置虚拟 NAT 设备使用的 DNS 服务器。 自动检测可用的 DNS 服务器 选择此选项可检测可用的 DNS 服务器。要将某个 DNS 服务器添加到列表,请取消选择此复选框,然后在 首选 DNS 服务器文本框中输入首选及备用 DNS 服务器的 IP 地址。 策略 如果您有多个 DNS 服务器,请确定用于选择接收请求的服务器的策略。选择 顺序将按照名称顺序一次发送一个 DNS 请求。选择 循环将一次发送一个 DNS 请求,并循环使用各 DNS 服务器。 迸发发送到三个服务器,并等待第一个做出响应的服务器。 超时(秒) 选择当 NAT 设备无法连接到 DNS 服务器时保持尝试的秒数。 重试次数 选择重试次数。 |
NetBios 设置 |
(仅限 Windows 主机)选择 NBNS(NetBIOS 名称服务)及 NBDS(NetBIOS 数据报服务)超时和重试设置。 |
5.4、编辑 NAT 配置文件 如果您是高级用户,可以编辑 NAT 配置文件来修改 NAT 设置。 NAT 配置文件的位置取决于主机操作系统。
主机操作系统 |
NAT 配置文件位置 |
Windows Server 2008 R2、Windows Server 2012 R2、Windows 7、Windows 8 或 Windows 10 |
C:\ProgramData\VMware\vmnetnat.conf |
Linux |
/etc/vmware/vmnet8/nat/nat.conf |
NAT 配置文件位置 NAT 配置文件分为多个部分,每个部分用于配置 NAT 设备的一部分。以方括号包围的文本(如 [dns])是一个部分的起点标记。每个部分都包含一个或多个配置参数。配置参数的格式为 ip = 192.168.27.1/24。 您可以使用虚拟网络编辑器更改 NAT 配置。无需编辑 NAT 配置文件。
重要说明:制作 NAT 配置文件的备份副本。如果编辑了 NAT 配置文件,而后又使用了虚拟网络编辑器,您所做的编辑可能会丢失。 |
NAT 配置文件中的各个部分 NAT 配置文件分为多个部分。每个部分中的参数用于配置 NAT 设备的某一部分。 [host] 部分 [host] 部分包含配置 NAT 连接所需的参数。
参数 |
描述 |
ip |
NAT 设备应当使用的 IP 地址。它后面可以附加一个斜线以及子网中的位数。 |
netmask |
用于 NAT 网络的子网掩码。DHCP 地址需要从该地址范围中分配。 |
configport |
可用于访问 NAT 设备状态信息的端口。 |
device |
要使用的 VMnet 设备。Windows 设备的形式为 vmnetx,其中 x 是 VMnet 的编号。Linux 设备的形式为 /dev/vmnetx。 |
activeFTP |
用于指示是否允许活动 FTP 的标记。活动 FTP 允许由远程 FTP 服务器打开传入连接。如果关闭此功能,则只有被动模式 FTP 才能正常工作。将此标记设置为 0 即可关闭功能。 |
[host] 部分参数 [udp] 部分 [udp] 部分包含 timeout 参数,可用于指定为 NAT 网络保留 UDP 映射的秒数。 [dns] 部分 [dns] 部分仅用于 Windows 主机。Linux 主机不会用到此部分。
参数 |
描述 |
policy |
用于 DNS 转发的策略。
- order 按名称服务器的顺序一次发送一个 DNS 请求。
- rotate 一次发送一个 DNS 请求,并通过 DNS 服务器进行旋转。
- burst 发送到三个服务器,并等待第一个做出响应的服务器。
|
timeout |
重试 DNS 请求前的秒数。 |
retries |
NAT 设备不再尝试响应 DNS 请求前经历的重试次数。 |
autodetect |
指示 NAT 设备是否应检测主机上的可用 DNS 服务器的标记。 |
nameserver1 |
要使用的 DNS 服务器的 IP 地址。 |
nameserver2 |
要使用的 DNS 服务器的 IP 地址。 |
nameserver3 |
要使用的 DNS 服务器的 IP 地址。 |
[dns] 部分参数 如果已打开 autodetect 并指定了一些名称服务器,那么在 nameserver1、nameserver2 和 nameserver3 中指定的 DNS 服务器添加在检测到的 DNS 服务器列表之前。 [netbios] 部分 [netbios] 部分仅适用于 Windows 主机。Linux 主机不会用到此部分。
参数 |
描述 |
nbnsTimeout = 2 |
NBNS 查询的超时时间,以秒为单位。 |
nbnsRetries = 3 |
每个 NBNS 查询的重试次数。 |
nbdsTimeout = 3 |
NBDS 查询的超时时间,以秒为单位。 |
[netbios] 部分参数 [incomingtcp] 部分 [incomingtcp] 部分用于配置 NAT 的 TCP 端口转发。您可以将端口号分配给虚拟机的 IP 地址和端口号。 该示例创建了一个从主机端口 8887 到 IP 地址 192.168.27.128 和端口 21 的映射。 8887 = 192.168.27.128:21 设置此映射后,如果外部计算机连接到主机端口 8887,网络数据包会被转发到 IP 地址为 192.168.27.128 的虚拟机的端口 21(用于 FTP 的标准端口)。 [incomingudp] 部分 [incomingudp] 部分用于配置 NAT 的 UDP 端口转发。您可以将端口号分配给虚拟机的 IP 地址和端口号。 该示例创建了一个从主机端口 6000 到 IP 地址 192.168.27.128 和端口 6001 的映射。 6000 = 192.168.27.128:6001 设置此映射后,如果外部计算机连接到主机端口 6000,网络数据包会被转发到 IP 地址为 192.168.27.128 的虚拟机的端口 6001。
先查看我本机的vmnetnat.conf文件 ------- # Windows NAT configuration file [host] # NAT gateway address ip = 192.168.105.2/24 hostMAC = 00:50:56:C0:00:08 # Host IP address hostIp = 192.168.105.1 # enable configuration; disabled by default for security reasons #configport = 33445 # VMnet device if not specified on command line device = vmnet8 # Allow PORT/EPRT FTP commands (they need incoming TCP stream...) activeFTP = 1 # Allows the source to have any OUI. Turn this one if you change the OUI # in the MAC address of your virtual machines. allowAnyOUI = 1 # Controls if (TCP) connections should be reset when the adapter # they are bound to goes down. resetConnectionOnLinkDown = 1 # Controls if (TCP) connections should be reset when guest TCP packet's # destination is the NAT's IP itself. resetConnectionOnDestLocalHost = 1 # Controls if enable ipv6 for NAT mode natIp6Enable = 0 # Controls if set ipv6 prefix for NAT mode natIp6Prefix = fd15:4ba5:5a2b:1008::/64 [tcp] # Value of timeout in TCP TIME_WAIT state, in seconds timeWaitTimeout = 30 [udp] # Timeout in seconds, 0 = no timeout, default = 30; real value might # be up to 100% longer timeout = 30 [dns] # This section applies only to Windows. # # Policy to use for DNS forwarding. Accepted values include order, # rotate, burst. # # order: send one DNS request at a time in order of the name servers # rotate: send one DNS request at a time, rotate through the DNS servers # burst: send to three servers and wait for the first one to respond policy = order # Timeout in seconds before retrying DNS request. timeout = 2 # Retries before giving up on DNS request retries = 3 # Automatically detect the DNS servers (not supported in Windows NT) autodetect = 1 # List of DNS servers to use. Up to three may be specified #nameserver1 = 198.41.0.4 #nameserver2 = 192.36.148.17 #nameserver3 = 202.12.27.33 [netbios] # Timeout for NBNS queries. nbnsTimeout = 2 # Number of retries for each NBNS query. nbnsRetries = 3 # Timeout for NBDS queries. nbdsTimeout = 3 [incomingtcp] # Use these with care - anyone can enter into your virtual machine through these... # FTP (both active and passive FTP is always enabled) # ftp localhost 8887 #8887 = 192.168.27.128:21 # WEB (make sure that if you are using named webhosting, names point to # your host, not to guest... And if you are forwarding port other # than 80 make sure that your server copes with mismatched port # number in Host: header) # lynx http://localhost:8888 #8888 = 192.168.27.128:80 # SSH # ssh -p 8889 root@localhost #8889 = 192.168.27.128:22 [incomingudp] # UDP port forwarding example #6000 = 192.168.27.128:6001 [PrivilegedTCP] autodetect = 1 [PrivilegedUDP] autodetect = 1 ------- |
再看Linux nat.conf 文件示例 以下是 Linux 主机系统上的 NAT 配置文件示例。
# Linux NAT configuration file [host] # NAT gateway address ip = 192.168.237.2/24 hostMAC = 00:50:56:C0:00:08 # enable configuration; disabled by default for security reasons #configport = 33445 # vmnet device if not specified on command line device = vmnet8 # Allow PORT/EPRT FTP commands (they need incoming TCP stream...) activeFTP = 1 # Allows the source to have any OUI. Turn this one if you change the OUI # in the MAC address of your virtual machines. #allowAnyOUI = 1 [udp] # Timeout in seconds, 0 = no timeout, default = 60; real value might # be up to 100% longer timeout = 30 [dns] # This section applies only to Windows. # # Policy to use for DNS forwarding. Accepted values include order, # rotate, burst. # # order: send one DNS request at a time in order of the name servers # rotate: send one DNS request at a time, rotate through the DNS servers # burst: send to three servers and wait for the first one to respond policy = order; # Timeout in seconds before retrying DNS request. timeout = 2 # Retries before giving up on DNS request retries = 3 # Automatically detect the DNS servers autodetect = 1 # List of DNS servers to use. Up to three may be specified #nameserver1 = 208.23.14.2 #nameserver2 = 63.93.12.3 #nameserver3 = 208.23.14.4 [netbios] # This section applies only to Windows. # Timeout for NBNS queries. nbnsTimeout = 2 # Number of retries for each NBNS query. nbnsRetries = 3 # Timeout for NBDS queries. nbdsTimeout = 3 [incomingtcp] # Use these with care - anyone can enter into your virtual machine through # these... # FTP (both active and passive FTP is always enabled) # ftp localhost 8887 #8887 = 192.168.27.128:21 # WEB (make sure that if you are using named webhosting, names point to # your host, not to guest... And if you are forwarding port other # than 80 make sure that your server copes with mismatched port # number in Host: header) # lynx http://localhost:8888 #8888 = 192.168.27.128:80 # SSH # ssh -p 8889 root@localhost #8889 = 192.168.27.128:22 [incomingudp] # UDP port forwarding example #6000 = 192.168.27.128:6001 |
5.5、在 NAT 网络中使用 NetLogon 如果您要在 Windows 主机系统上运行的 Windows 虚拟机中使用 NAT 模式网络连接,可以从虚拟机中通过 NetLogon 登录到 Windows 域,然后访问 WINS 服务器已经识别的文件共享位置。 要使用 NetLogon,您需要将虚拟机设置为使用 NetLogon。该设置过程类似于在使用其他 LAN 中域控制器的某个 LAN 上设置物理机。 要登录虚拟 NAT 网络以外的 Windows 域,虚拟机需要访问这个域的 WINS 服务器。如果已在主机系统上设置 DHCP 服务器在 NAT 网络上所用的 WINS 服务器,您可以将虚拟机连接到该服务器。要从虚拟机连接到未在主机系统上设置的 WINS 服务器,必须手动配置 WINS 服务器的 IP 地址。 在虚拟机拥有 WINS 服务器的 IP 地址后,您可以在虚拟机中使用 NetLogon 登录到域并访问其中的共享。您只能访问同一 NAT 网络中的虚拟机共享或同一个域中桥接的虚拟机的共享。 例如,如果 WINS 服务器通过一个域控制器覆盖了某个域,您可以从虚拟机访问该域控制器并向域中添加虚拟机。需要使用管理员用户 ID 和密码才能访问域控制器。 使用 NAT 连接到主机上现有的 WINS 服务器 如果已在主机系统上设置 DHCP 服务器在 NAT 网络上所用的 WINS 服务器,您可以将虚拟机连接到该服务器。 您可以对 Windows 客户机操作系统使用相同的过程。对于不同类型的 Windows 操作系统,具体步骤可能有所差异。 步骤
- 在 Windows 虚拟机中,右键单击网上邻居,然后选择属性。
- 右键单击虚拟网络适配器,然后单击属性。
- 在“属性”对话框中,选择 Internet 协议(TCP/IPv4),然后单击属性。
- 在“TCP/IP 属性”对话框中,单击高级。
- 在 WINS 选项卡的 NetBIOS 设置中,选择默认: 使用 DHCP 服务器的 NetBIOS 设置。
- 连续单击两次确定,然后单击关闭。
手动配置 WINS 服务器的 IP 地址 要从虚拟机连接到未在主机系统上设置的 WINS 服务器,必须手动配置 WINS 服务器的 IP 地址。 以下操作步骤可用于 Windows 2000、XP、2003 Server 和 9x 客户机操作系统。 对于不同类型的 Windows 操作系统,具体步骤可能有所差异。请为每个需要从虚拟机连接的 WINS 服务器重复执行此流程。 步骤
- 在 Windows 虚拟机中,右键单击网上邻居,然后选择属性。
- 在网络连接窗口中,右键单击虚拟网络适配器,然后选择属性。
- 在“属性”对话框中,选择 Internet 协议(TCP/IPv4),然后单击属性。
- 在“TCP/IP 属性”对话框中,单击高级。
- 在 WINS 选项卡中,单击添加。
- 在“TCP/IP WINS 服务器”对话框中,键入 WINS 服务器的 IP 地址到 WINS 服务器文本框,然后单击添加。
WINS 服务器的 IP 地址显示在 WINS 选项卡的 WINS 地址列表中。
- 连续单击两次确定,然后单击关闭。
指定从 1024 以内的源端口发出的连接 如果使用 NAT 的虚拟机所尝试连接的服务器需要客户端使用 1024 以内的源端口,NAT 设备必须从 1024 以内的端口转发请求。出于安全目的,某些服务器只能接受来自 1024 以内源端口的连接。 用于控制虚拟机的源和目标端口的参数位于 NAT 配置文件的 [privilegedUDP] 和 [privilegedTCP] 部分。根据您需要建立的连接类型,您可能要在其中的一个或所有部分中添加/修改设置。您可以设置两个参数,让每个参数显示在单独的行中。
参数 |
描述 |
autodetect = n |
确定 NAT 设备是否尝试将 1024 以内的虚拟机源端口映射到 1024 以内的 NAT 源端口。设置为 1 即表示 true。设置为 0 表示 false。在 Windows 主机,默认设置为 1 (true)。在 Linux 主机上,默认设置为 0 (false)。 |
port = n |
指定目标端口,其中 n 是接受客户端连接的服务器的端口。在虚拟机连接任意服务器的指定端口时,NAT 设备会尝试从 1024 以内的源端口建立连接。您可以根据所建立连接的具体要求,在 [privilegedUDP] 和/或 [privilegedTCP] 部分中加入一个或多个端口设置。请在单独的行中输入各端口设置。 |
用于映射虚拟机的源端口和目标端口的参数 |