需求
使用 Windows server 作为Hyper-V 虚拟出许多虚拟机,基本上都分配了内网地址,现在需要这些虚拟机访问外网,或者外网直接访问这些虚拟机,必须配置一个网关服务器。我决定直接使用 Windows 的远程访问中的 NAT 服务来完成。
没有找到官方文档,本文完全参考了以下文章
在Windows Server系统上配置路由转发功能
环境
Windows server 2012 r2
外网网卡 : 221.122.XXX.XXX
内网网卡 : 192.168.0.1 (作为内网网关地址)
由于服务器已经开启 hyper-V ,使用,实际使用的分别是 2 块虚拟网卡
配置服务器管理器
-
服务器管理器 – 添加角色和功能
一路回车,“选择服务器角色” 找到 “远程访问”,继续一路回车,直到完成在选择角色服务这里,勾选“路由”,第一项 “DirectAccess…”也跟着一起选中了
-
服务器管理器 – 工具 — 路由和远程访问
如果看到服务器状态下那个本地服务器已经启动,就不能 “配置并启用路由和远程访问”,可以先“禁用路由和远程访问”
选择 : 配置并启用路由和远程访问
开始我一直折腾 “配置 LAN 路由” ,那个没有出现在功能列表中。使用,只能选 “其他”,然后,就可以看到了
我这里最终决定,只选 NAT
-
重点来了:新增接口
开始时,将接口理解为网卡,总是在 2 个网卡中来回折腾不成功!
后来,通过以上参考文章,突然明白,内网接口应该选 “本地”,而不是配置了 192.168.0.1 的那块网卡!1). 公用接口: 配置好外网地址的网卡,负责链接访问 internet
2). 专用接口: 不只是那个配置了 192.168.0.1 的网卡,应该是所有本机网卡的集合,接口负责指向 localhost 或 127.0.0.1 ,所以叫做“本地连接”
最终结果如下图
-
分别配置以上 2 个接口
外网
勾选 “公用接口连接到Internet“
内网
勾选 “专用接口连接到专用网络”到这里,已经实现了内网到外网的访问
通过外网接口实现端口转发后续再记录
测试
找一个只有内网地址的虚拟机
$ ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:15:5d:32:bd:04 brd ff:ff:ff:ff:ff:ffinet 192.168.0.193/24 brd 192.168.0.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::215:5dff:fe32:bd04/64 scope link valid_lft forever preferred_lft forever
-
ping 外网网关
$ ping 192.168.0.1PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.64 bytes from 192.168.0.1: icmp_seq=1 ttl=128 time=0.228 ms64 bytes from 192.168.0.1: icmp_seq=2 ttl=128 time=0.161 ms
-
ping 外网网关
$ ping 221.122.XXX.XX1PING 221.122.XXX.XX1 (221.122.XXX.XX1) 56(84) bytes of data.64 bytes from 221.122.XXX.XX1: icmp_seq=1 ttl=254 time=1.94 ms64 bytes from 221.122.XXX.XX1: icmp_seq=2 ttl=254 time=1.99 ms64 bytes from 221.122.XXX.XX1: icmp_seq=3 ttl=254 time=2.06 ms
-
ping DNS 地址
$ ping 223.5.5.5PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.64 bytes from 223.5.5.5: icmp_seq=1 ttl=114 time=6.75 ms64 bytes from 223.5.5.5: icmp_seq=2 ttl=114 time=6.63 ms64 bytes from 223.5.5.5: icmp_seq=3 ttl=114 time=6.66 ms......
-
ping 域名
$ ping jd.comPING jd.com (111.13.149.108) 56(84) bytes of data.64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=1 ttl=49 time=7.12 ms64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=2 ttl=49 time=7.04 ms64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=3 ttl=49 time=6.87 ms64 bytes from 111.13.149.108 (111.13.149.108): icmp_seq=4 ttl=49 time=6.89 ms......
端口转发
还以上面 192.168.0.193 虚拟机为例
-
将 传入到本机的 22193 端口 — 转发到 192.168.0.193的 22 端口,实现外网直接 ssh 到内网 192.168.0.193
-
测试
假设本机外网地址是 221.122.XXX.XXX$ ssh 221.122.XXX.XXX -p 22193
OK