我有以下拓扑
.───────────────.
┌──────────────────┐ _.─' `──.
│ │ ,─' '─.
│ ISP Router │ Dynamic IP ; :
│ with NAT ├─────────────────────────────────────────────────────────: Internet ;
│ │ ╲ ╱
└─────────┬────────┘ '─. ,─'
│ `──. _.─'
│ 10.0.0.1 `──────┬──────'
│ │
.──────┴────. .─────┴─────.
,─' '─. ┌─────────────────────────┐ ,─' '─.
,' `. │ │ ,' `.
; LAN : Static DHCP┌──┴───┐ ┌──┴───┐ Static IP ; Public Net :
: ;─────────────┤ eth1 │ My Server │ eth0 ├────────────: ;
╲ 10.0.0.0/24 ╱ 10.0.0.5 └──┬───┘ └──┬───┘ 1.2.3.5 ╲ 1.2.3.4/20 ╱
`. ,' │ Debian Buster │ mydomain.com `. ,'
'─. ,─' │ │ '─. ,─'
`─────────' └─────────────────────────┘ `─────────'
由于历史原因,我的 ISP 使用单独的网络来提供静态 IP。这意味着我必须将我的服务器直接连接到直接暴露在互联网上的特殊连接(在图中,这是eth0
IP 1.2.3.5
)。
但是,我在家中将同一台服务器用作 NAS,由于这是一个完全独立的网络,因此我使用不同的接口连接它eth1
,并使用地址创建静态 DHCP 分配10.0.0.5
。这样,家庭网络中的其他设备就可以找到它并访问网络挂载。
最后,我有一个包含我的域名的 DNS 记录,在此示例中mydomain.com
,指向1.2.3.5
。
我遇到了几个问题:
- 当我尝试
mydomain.com
从 LAN 访问时,它不起作用。我认为这是因为服务器从接口获取数据包eth0
,然后回复eth1
,而另一台设备丢弃了响应,因为它来自不同的 IP。 - 在启动时,服务器应选择
1.2.3.4
作为引导互联网流量的网络,以便外部访问可以通过 进行mydomain.com
。但是,由于 和 都eth0
通过eth1
各自的网关访问互联网,因此它有时会启动并选择10.0.0.1
作为默认网关,然后访问mydomain.com
不起作用。我相信这是一个类似的问题,流量通过 进入eth0
但通过 离开eth1
。
虽然我熟悉基本的网络知识,但我没有像这样将服务器同时连接到多个网络的经验。理想情况下,我希望配置服务器以便:
- 所有互联网流量都通过
eth0
- 所有进入的流量
eth0
都通过eth0
- 所有进入的流量
eth1
都通过eth1
我的服务器运行 Debian,我将非常感激任何帮助。
编辑:因此,在禁用 eth1 网关并进行一些操作后,tcpdump
我能够确认流量是从 eth0 进入并离开 eth1。问题是 ISP 没有对去往端点的流量进行 NAT 1.2.3.5
,然后服务器将10.0.0.X
地址识别为位于接口上eth1
。
答案1
这是一个路由问题,可以通过基于源的路由或策略路由来解决。这涉及两个路由表,每个源地址一个:
看http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html更多细节。
答案2
我相信这是因为服务器从接口 eth0 获取数据包,然后通过 eth1 回复。
不会。带有 NAT 的 ISP 路由器会将您的客户端 10.0.0.0 地址 NAT 为 ISP 动态地址,因此您的服务器将回复该地址而不是内部地址。FTP 等例外情况不一定与 NAT 兼容,因为它们会将您的内部 IP 地址传递到连接的另一端,但一般情况下,您的 NAT 流量将保留在 eth0 上。
检查您的日志以确认客户端正在出站到 1.2.3.4 并且服务器正在从 NATed 地址 ip.ip.ip.ip 获取连接。
启动时,服务器应选择 1.2.3.4 作为引导互联网流量的网络,以便通过 mydomain.com 进行外部访问。但是,由于 eth0 和 eth1 都可以通过各自的网关访问互联网
不要这样做。在多宿主配置中拥有多个默认网关很少能如人们所愿。粗略地说,只有当两条路径都提供对相同网络的访问时,才应使用多个默认网关,例如企业环境中的路由器冗余/高可用性。由于您的 ISP 路由器到互联网和您到公共网络的直接连接并不相同,因此您应该删除它。eth0 应该有一个默认路由,eth1 应该有一个到 10.xxx 的路由。您仍然可以使用 DHCP 执行此操作,但是我会将其作为 10.0.0.5 的保留/排除,并手动配置服务器 IP。
除了无关的默认路由之外,您所描述的是正常的默认操作。请务必查找上面未描述的其他问题:
- 主机文件与 DNS 不同(您是否尝试让客户端连接到 10.0.0.5 而不是 1.2.3.4?我喜欢在内部使用技术名称,例如 webserver1.internalfqdn.com,在外部使用友好名称,例如www.externalfqdn.com)
- 上面未反映手动路由表(您是否尝试将 10.0.0.x 通过 10.0.0.5 作为路由器快捷方式连接到 1.2.3.4? - 这可行,但需要额外的配置)
- 路由协议(例如 RIP)(实际上是上述协议的变体,但如果您启用了 RIP 或其他路由发布,则可能会发布错误的路由