如何配置具有单个 NIC 的 Linux NAT 路由器

如何配置具有单个 NIC 的 Linux NAT 路由器

我在具有 2 个子网的 Azure 虚拟网络上运行了多台 Windows Server。我的域控制器位于 10.0.0.4,服务器位于 10.0.1.4、10.0.1.5 等。我配置了点到站点 VPN,以便我可以从我的 PC 建立到虚拟网络的 VPN 连接。当我建立 VPN 连接时,我的 PC 会收到 10.0.16.x IP。默认情况下,Azure 提供的 VPN 连接仅通过 VPN 路由 10.xxx 流量,但我已通过检查修改了这一点在远程网络上使用默认网关因为我希望在连接到 VPN 时所有互联网流量都通过 Azure 路由。建立此连接后,我可以访问 Azure 虚拟网络上的服务器,但无法连接到互联网。我的理解是,需要使用 NAT 路由器来促进互联网连接。

我添加了一个 CentOS VM,版本为 10.0.1.6。它只有一个 NIC,因为 Azure VM 不可能有多个 NIC。我有两个问题:

  1. 是否可以配置具有单个 NIC 的 NAT 路由器?如果可以,如何配置?谷歌搜索让我陷入大量 iptables 命令中,大多数用于具有 2 个 NIC 的 NAT 路由器。我找不到任何可以简化此类场景所需配置步骤的方法。我尝试了命令这里,但没有成功。

  2. 在 PC 上连接到 VPN 后,我不太清楚我需要做什么。我是否本质上想将 10.0.1.6 设为默认网关?如果是这样,我该怎么做?

    route delete 0.0.0.0     
    route add 0.0.0.0. MASK 0.0.0.0 10.0.1.6
    

ifconfig如果有帮助的话,以下是CentOS VM 上的输出:

eth0      Link encap:Ethernet  HWaddr 00:15:5D:61:7E:1E
          inet addr:10.0.1.6  Bcast:10.0.1.255  Mask:255.255.255.0
          inet6 addr: fe80::215:5dff:fe61:7e1e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:931 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:101709 (99.3 KiB)  TX bytes:162650 (158.8 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

以下是 Azure 虚拟网络配置页面的片段,希望有助于描述网络布局。我使用“子网 1”作为域控制器,“子网 2”是所有其他服务器所在的位置(包括我试图用作路由器的 CentOS VM)。Azure 自动将“子网 1”中的 VM 配置为默认网关 10.0.0.1,将“子网 2”中的 VM 配置为默认网关 10.0.1.1。但这些网关不是我能控制的服务器。VPN 客户端从“点到站点连接”地址空间分配 IP。

Azure 虚拟网络配置屏幕截图

(显然我不被允许发布图片)

以下是 (Windows) VPN 客户端上的路由表链接(本例中将 10.1.0.1 配置为默认网关后):

VPN 客户端上的路由表

答案1

vpn 服务器(例如 10.0.0.1)始终是从客户端发出的所有 ip 流量的第一站。

因此,如果您有流量去往 www.google.com,它必须首先穿过此 vpn 服务器,因为 vpn 连接是点对点链接,即来自客户端的流量只有一个出口,即服务器。

然后,vpn 服务器将看到流量的目的地,并且由于服务器配置为不转发目的地为互联网的流量,因此它将丢弃该流量。

因此,VPN 服务器将始终拦截并丢弃前往互联网的流量,您无法绕过它。

结论,流量甚至不会到达centos,因此不会触发NAT。

您可以在原始 vpn 隧道内创建从客户端到 centos(例如 openvpn)的第二条隧道,以隐藏来自 vpn 服务器的互联网流量。

或者,另一个解决方案是在 centos VM 上设置一个 Web 代理,并为该代理配置您的 Web 浏览器,这样 http 流量将始终从目标 IP 为 centos 的客户端出去,然后它将到达代理,代理将转发到互联网,但是此解决方案仅适用于 http 流量。

相关内容