![OpenBSD 路由:无法从配置为静态阻止的 IF 到达网关](https://linux22.com/image/675496/OpenBSD%20%E8%B7%AF%E7%94%B1%EF%BC%9A%E6%97%A0%E6%B3%95%E4%BB%8E%E9%85%8D%E7%BD%AE%E4%B8%BA%E9%9D%99%E6%80%81%E9%98%BB%E6%AD%A2%E7%9A%84%20IF%20%E5%88%B0%E8%BE%BE%E7%BD%91%E5%85%B3.png)
当尝试设置 OpenBSD 路由器时,我遇到了明显的路由问题。
我有一台 1U 机器,配有 6 个千兆位网卡(em0-em5)。我的 ISP 为我提供了以下服务:
xx.xx.97.246/28 static WAN IP.
xx.xx.97.241 default gateway address.
xx.xx.98.192/29 static block that is externally routed to via xx.xx.97.246
这是我的设置:
+-------------------+
| em0 +----> ISP's gateway (xx.xx.97.241)
| xx.xx.97.246 |
+-------------------+
| em2 +----> DMZ network (xx.xx.98.194-198)
| xx.xx.98.193/29 |
+-------------------+
| em4 +----> LAN2 (172.16.1.0/24)
| 172.16.1.1 | [NATs to xx.xx.97.246 address]
+-------------------+
| em5 +----> LAN (192.168.1.0/24)
| 192.168.1.1 | [NATs to xx.xx.97.246 address]
+-------------------+
已在 启用转发sysctl.conf
。
通过此设置和一些基本的 PF 规则,我能够从 LAN 网络 (em4/5) 获得基本的 Internet 访问权限,并且我可以从 LAN 网络访问 DMZ 网络上的邮件/DNS 服务器。到目前为止,一切顺利。
问题在于从互联网访问 DMZ 网络,以及 DMZ 网络上的任何主机访问互联网(执行上游 DNS 查找等)。当 DMZ 网络地址为端点时,似乎没有任何方向与互联网的连接。
我可以xx.xx.97.246
从 DMZ 网络 ping 通 WAN 地址,但无法 ping 通 ISP 的默认网关地址 ( xx.xx.97.241
)。
当我尝试从 DMZ 网络跟踪路由到 WAN IP 时,我得到了一个奇怪的跟踪 - 它跳过了 em2 跳转,只报告了 WAN IP,好像它是下一跳一样。如果我将 em2 地址指定为目标地址,我可以跟踪到 em2 并获取其地址作为下一跳。无论如何,我无法 ping 或跟踪到网关地址 - 我收到“主机不可访问”消息。
这是我迄今为止尝试过的:
添加从 WAN IP 到 WAN IP 的静态路由
xx.xx.98.193
,并得到“路由存在”的提示,这很合理。出于无奈,我尝试添加从 WAN IPxx.xx.98.193
到网关地址的路由,但得到“目的地无法到达”的提示。将 em0添加
xx.xx.98.193
为 IP 别名,并将 的地址更改em2
为xx.xx.98.194
。除了破坏通过网关的所有路由之外,这似乎没有任何影响。拔下 DMZ 交换机
em2
,插入配置为静态地址的 PC,xx.xx.98.194
然后禁用 pf,pfctl -d
这样基本上可以传递所有内容并将 pf 排除在外。没有变化。使用 仔细检查了 arp 表
arp -a
,可以看到 em2(它的 MAC)已绑定到 xx.xx.98.193/29。还使用 检查了路由表,netstat -ranf inet
它显示xx.xx.97.241
网关为默认值。
此时我认为这纯粹是一个路由问题,特别是在执行步骤 3 和 4 之后。顺便说一下,在尝试 3 和 4 之前,步骤 1 和 2 被逆转并且系统重新启动以恢复到以前的配置。
我已经考虑过桥接em0
,em2
但它似乎没有必要,因为所有接口都在同一台机器上,并且一旦em2
主机的数据包进入路由器,路由表就应该有到默认网关的路径。
我还注意到一个奇怪的 arp 消息重复出现,内容是/var/log/messages
“尝试用 xx.xx.98.193 覆盖永久条目”。通过 arp 发送的 mac 来自 ISP 的网关xx.xx.97.241
。不确定这是正常的“聊天记录”还是我的问题的症状。
提前感谢您阅读和回复,
抢
更新:
这是我的路由表:
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default xx.xx.97.241 UGS 4 54 - 8 em0
127/8 127.0.0.1 UGRS 0 0 32768 8 lo0
127.0.0.1 127.0.0.1 UHl 1 0 32768 1 lo0
172.16.1/24 172.16.1.1 C 0 0 - 8 em4
172.16.1.1 xx:xx:xx:xx:1b:60 HLl 0 0 - 1 lo0
172.16.1.255 172.16.1.1 Hb 0 0 - 1 em4
192.168.1/24 192.168.1.1 C 0 0 - 8 em5
192.168.1.1 xx:xx:xx:xx:1b:61 HLl 0 0 - 1 lo0
192.168.1.255 192.168.1.1 Hb 0 0 - 1 em5
xx.xx.97.240/28 xx.xx.97.246 UC 1 0 - 8 em0
xx.xx.97.241 xx:xx:xx:xx:fc:d4 UHLc 1 4 - 8 em0
xx.xx.97.246 xx:xx:xx:xx:1b:5c HLl 0 0 - 1 lo0
xx.xx.97.255 xx.xx.97.246 UHb 0 0 - 1 em0
xx.xx.98.192/29 xx.xx.98.193 UC 2 0 - 8 em2
xx.xx.98.193 xx:xx:xx:xx:1b:5e HLl 0 0 - 1 lo0
xx.xx.98.195 xx:xx:xx:xx:d8:33 UHLc 0 4 - 8 em2
xx.xx.98.197 link#3 UHLc 0 4 - 8 em2
xx.xx.98.199 xx.xx.98.193 UHb 0 0 - 1 em2
224/4 127.0.0.1 URS 0 0 32768 8 lo0
昨晚我尝试了很多配置(主要是因为我没有主意了)。按照之前的尝试,PF 被禁用以pfctl -d
将其作为变量删除。可能最明智的尝试是这样的:
- 拔下 em4 和 em5(动态网络)并从 /etc 中删除它们的 hostname.if 文件以仅留下
em0
和em2
。 - 配置
em0
地址xx.xx.98.193
,并将 em2 配置为地址,然后使用xx.xx.98.194
连接一台 PC 。em2
xx.xx.98.195
使用该配置,在 PC 上我可以 ping 通 194 地址 (em2 IF),但无法 ping 通 193 地址 (em0 IF)。在 OpenBSD 系统中,我可以 ping 通 194 和 195 地址。
em2
不管问题是什么,似乎在尝试连接时路由中断了em0
。此外,至少有一次 ping 尝试,PC 以 50 的丢失率成功完成em0
,但此后一直失败。
这里肯定有什么愚蠢的东西是我遗漏的。我接下来要尝试的疯狂的事情是启用/添加内核路由日志,并比较接口之间和 em0/2 之间的成功路由之间的输出。这将是 OpenBSD 网络堆栈/内核的速成课程。:/
答案1
发布 netstat -ranf inet 的输出。如果您禁用 pf 并使用 ping -I xx.xx.98.193 ping 互联网上已知会响应的主机,会发生什么情况?我还发现您的 ISP 为 xx.xx.98.193 提供的 MAC 地址很不寻常 — 这让我相信您的问题出在您的 ISP 端。