将所有流量发送到 eth0,将所有流量接收到 eth0,除了通过 eth1 进行 ssh 访问

将所有流量发送到 eth0,将所有流量接收到 eth0,除了通过 eth1 进行 ssh 访问

我有:

  • eth0 接口为 10.0.0.41,具有公共 IP 54.xxx(将用于 VPN 客户端)
  • eth1 接口为 10.0.0.100,具有公共 IP 57.xxx

eth1 是我使用 SSH 进行远程连接的地方,eth0 将作为 VPN IPsec 连接到另一台服务器

因为我的默认路由是 eth1,所以连接到 VPN 时会失败,因为 VPN 服务器只允许 IP 54.xxx,而不允许来自 57.xxx 的流量

现在,我如何告诉路由所有到 VPN 服务器地址:212.xxx 的流量都将通过 eth0(54.xxx)发送,并且仍有 eth1(57.xxx)可用于 SSH 远程访问?

编辑:

在此处输入图片描述

编辑:亚马逊是否允许我在 2 个网络接口上使用 2 个不同的子网公共 IP?似乎不行

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

编辑:Amazon EC2 - 具有多个子网的 VPC

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenarios.html

场景 1:仅具有公共子网的 VPC - 1 个子网 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario1.html

场景 2:具有公有子网和私有子网的 VPC - 2 个子网 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html

场景 3:具有公有子网和私有子网以及硬件 VPN 访问的 VPC - 3 个子网 http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario3.html

场景 4:仅具有私有子网和硬件 VPN 访问的 VPC http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario4.html

编辑:

步骤 1:Amazon EC2 > 场景 1:仅具有公共子网的 VPC - 1 个子网

步骤 2:这将允许 10.0.0.0/24 子网采用 1:1 NAT

步骤 3:现在要进行入站和出站流量绕过,我们应该执行以下操作:

ip rule add from 10.0.0.41/32 table 1 # outbound
ip rule add to 10.0.0.41/32 table 1   # inbound
ip route add default via 10.0.0.1 dev eth0 table 1

ip rule add from 10.0.0.100/32 table 2 # outbound
ip rule add to 10.0.0.100/32 table 2   # inbound
ip route add default via 10.0.0.1 dev eth1 table 2

步骤 4:进行远程测试,假设远程 PC 具有:iamremotely_publicip

ping publicip_eth0
ping publicip_eth1

第五步:入站测试

$ tcpdump -vv src iamremotely_publicip and not dst port 22 -i any

### inbound reply received for eth0
13:29:02.163426 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    2.205.81.5 > ip-10-0-0-41.eu-west-1.compute.internal: ICMP echo request, id 10242, seq 1, length 64

### inbound reply received for eth1
13:24:05.415740 IP (tos 0x0, ttl 55, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
    2.205.81.5 > ip-10-0-0-100.eu-west-1.compute.internal: ICMP echo request, id 11808, seq 52, length 64

第六步:在PC上进行出站测试iamremotely_publicip

$ tcpdump -vv src publicip_eth0 and not dst port 22 -i any
$ tcpdump -vv src publicip_eth1 and not dst port 22 -i any

无需 VPN 即可实现。

答案1

您的 LAN 是如何设置的非常不清楚,而且看起来有点不对。

  • eth0/1 属于什么?DMZ 服务器?还是本地 LAN 的默认路由器?

  • 分配了 54.xxx 和 57.xxx 的实际设备是什么?它们是 2 个不同的物理互联网路由器吗?还是从此主机建立的 PPP 链接?

  • 您希望 eth0 成为 IPsec 链接到具有面向公众的 IP 212.xxx 的远程网络的专用接口,对吗?

  • 如果 eth0 是用于到远程 VPN 网络的专用 VPN 链接,为什么它会连接到本地 LAN 子网 10.0.0.x?

您必须为 eth0 和 eth1 使用不同的子网,否则会非常混乱,并且您一定会从两个接口发送数据包,因为主机认为它们位于同一子网中。如果 eth0 仅用于专用 VPN 链接,请为其提供一个虚拟子网,如 192.168.200.x。您的本地和远程 LAN 永远不应路由到此子网,它们只会在 VPN 隧道内使用此链接,该隧道将具有本地私有 IP(10.0.0.x)。

只要您有一个 212.xxx 使用 eth0 的静态路由,一旦建立了 VPN 链接,指定给远程 LAN 的所有流量都将使用隧道,因此使用 eth0,只要 IPsec 端点存在于 LAN 上的主路由器上,就不需要进行特殊路由,所有必要的路由都应该为您设置好。

您遇到的远程 VPN 服务器阻止 54.xxx 的问题是一个仅与远程端有关的安全限制。远程 VPN 服务器仅期望来自 57.xxx 的流量并阻止来自 54.xxx 的请求。为此,您必须找出它这样做的原因。您是否使用 57.xxx 启动了 VPN 链接?或者 VPN 服务器是否使用反向 DNS 查找来限制访问,而您没有正确设置 DNS,因此 VPN 链接是从解析回 54.xxx 的 DNS 主机名建立的?IPsec 链接是否使用与解析为 57.xxx 的 DNS 主机名绑定的 SSL 证书?

编辑:这是修改后的建议:

  • 要求 Amazon 在 54.xxx 链路上提供不同的子网(您不能仅在主机上分配任意 IP 并期望 Amazon 的路由器知道如何处理它)

  • 使用新的子网和默认网关设置 eth0(例如,ip 10.0.2.2 gw 1​​0.0.2.1)。10.0.2.2 是 eth0 的本地 IP,10.0.2.1 是此子网的默认网关,位于 Amazon 的网络上。

  • 当您设置 eth0 时,您的主机应该已经具有 10.0.2.0 的默认路由以使用 10.0.2.2 作为接口,任何 10.0.2.0/24 的流量都将跳过 eth1。

  • 为 VPN 服务器 IP 212.xxx 设置静态路由,以使用 10.0.2.1 作为网关。无需指定 eth0。

  • 完成。当您连接到 212.xxx 时,它将自动使用 eth0 和 gw 1​​0.0.2.1,然后通过 54.xxx 链接连接到互联网

答案2

策略路由应该可以在正常设置下工作,不确定它是否适用于 NAT/VPN,但我会尝试以下方法:

ip rule add from src 10.0.0.41/32 table 1
ip route add default via 10.0.0.xxx dev eth0 table 1

ip rule add from src 10.0.0.100/32 table 2
ip route add default via 10.0.0.xxx dev eth1 table 2

但我不知道亚马逊如何路由这些网络,以及 VPN 是否可以通过该设置工作。

另外,如果 arp 缓存不够冷,你可能需要做一些 arp magic 来使它们正常工作。

但这应该确保您的流量从 10.0.0.100 通过 eth1 出去,而 .41 通过 eth0 出去,因此如果它是 1:1 NAT,您应该能够通过 eth1 访问它。

除了测试实例之外,不要在任何实例上测试这一点,否则您可能会完全失去网络连接。

相关内容