我希望有人能解释一下这个问题。我对网络的了解最多只是基础的。
我在两个网络上有一个 CentOS 服务器:
- NIC1 位于公共 IP 上,网关设置在交换机 1 上。(ADSL 互联网)
- NIC2 设置为 10.10.10.2,交换机 2 上未设置网关。(有线互联网)
- 交换机 2 的网关/路由器是 10.10.10.1。(华硕路由器)
在 LAN 中,其他 LAN 电脑可以通过开放端口访问 10.10.10.2。当设置从网关/路由器 10.10.10.1 --> 10.10.10.2 的端口转发规则时,此方法不起作用。网关/路由器 10.10.10.1 --> 到 10.10.10.3 的端口转发有效(网关设置为 10.10.10.1 的 Windows 计算机)。
是否可以通过华硕路由器 10.10.10.1 从公共互联网访问 10.10.10.2?
答案1
IP 策略路由。
我找到了两篇相同的文章,我用它来更新我的 CentOS 服务器,使第二个 NIC 能够接收和发送数据包。还成功更新了另一台具有双 NIC/网关的类似服务器。
http://jensd.be/468/linux/two-network-cards-rp_filter<-- 我选择在“最佳解决方案”部分下设置 IP 策略,并且没有更改 rp_filter 值。本文还提供了漂亮的图表。
http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html <--上面的附加示例使我更加清楚。
如果您希望永久更改,请按照上面第一个链接中的说明进行操作。
我的例子:
- ip route add 99.88.77.66/24 dev eth0 table 1 (例如公共 IP #1)
- ip route add default via 99.88.77.1 table 1 (例如公共 IP #1 的网关)
- ip route add 10.10.10.0/24 dev eth1 table 2(不同网络上的第二个网卡)
- ip route add default via 10.10.10.1 table 2(华硕路由器网关)
- ip 规则从 99.88.77.66/32 表 1 添加优先级 100
- IP 规则从 10.10.10.4/32 表 2 添加优先级 110
- ip 路由刷新缓存
您的 /24 可能会根据您的 IP 子网掩码而改变。
答案2
首先,我们需要了解为什么您的设置不起作用。为此,我们需要考虑发生了什么。
- 通过“有线”互联网连接进行连接尝试。
- NAT路由器修改目标地址并设置映射表条目。
- 数据包到达您的服务器并生成响应。
- 您的服务器在其路由表中查找响应的目的地,并将数据包发送到默认网关(例如,“ADSL”互联网连接)。
- 数据包最有可能因为源地址是假的而被丢弃。即使数据包确实返回到客户端,其源地址也不会与客户端期望的源地址匹配,因此客户端会将其视为假的而丢弃。
现在我们了解了问题所在,我们可以采取一些措施。有几种选择。
选项 1 是在服务器上使用“策略路由”来根据源 IP 路由流量。如果服务器支持该选项,则这是最佳选项(最新版本的 Linux 支持该选项)。Stile 的回答介绍如何在 Linux 服务器上设置策略路由以根据源地址进行路由。
选项 2 是将服务器的默认网关指向可以执行策略路由的盒子。然后该盒子可以根据其源 IP 正确路由流量。如果服务器操作系统不支持策略路由,这可能是一个有用的解决方案。
选项 3 是让 NAT 盒伪装成端口转发的流量。我认为这是最后的选择,因为它隐藏了流量的真实源地址。