我有多个网络位于 Comcast 的住宅网络上。我需要通过其中一台主机上的 SSH 代理从各种环境访问这些网络。
(碰巧我正在使用 OpenWRT,因此那里的特定解决方案会很有帮助;但我通常也很好奇如何使用任何基于 Linux 或 BSD 的边缘路由解决方案来实现这一点。)
对于 IPv4 来说,这相对简单:由于我所有的内部 IP 都是使用 DHCP 分配的,因此我可以简单地设置一个转发规则,将外部接口上的端口 22 移动到特定 IP 上的端口 22。
由于我的 IPv6 地址都是使用 SLAAC 分配的,因此我没有可以在 ip6tables-land 中用来转发事物的静态地址。
如何检测前缀分配的变化,以便建立新的 iptables 规则?或者有没有办法设置一条规则,根据从 MAC 地址或类似的东西发现 IP 地址来转发到特定主机?(这些主机都在一个网段上,因此多播等应该可以工作。)
答案1
我认为你的情况你可以使用动态前缀转发,我的规则示例为/etc/config/firewall
:
config rule
option name 'HTTP-SSH-IPv6-myserver01'
option src 'wan'
option proto 'tcp'
option dest 'lan'
option dest_ip '::2c18:81a2:3422:f690/-64'
option dest_port '22 80 443'
option family 'ipv6'
option target 'ACCEPT'
创建如下 iptables 规则:
-A zone_wan_forward -d ::2c18:81a2:3422:f690/::ffff:ffff:ffff:ffff -p tcp -m tcp --dport 80 -m comment --comment "!fw3: HTTP-IPv6-myserver01" -j zone_lan_dest_ACCEPT
这里也描述了同样的情况:动态 IPv6 子网和 ip6tables。
因此它比 IPv4 更简单——您不需要在 DHCP 服务器上配置静态 IP 地址。
附言:第一次阅读问题时,标题中的“DMZ”让我感到困惑。
答案2
只要前缀是静态的,并且路由器知道该前缀,SLAAC 分配的地址就是静态的(临时地址除外)。
您有多种选择:
- 您可以向所有地址开放端口 22,然后您就可以 ssh 到所有主机。
- 配置路由器上的 DHCP 客户端以调用更改 ip6tables 规则的脚本。
- 使用 u32 匹配来匹配部分 IP 地址。
- 如果路由器的内部接口是 Linux 软件桥,则使用 ebtables,它可以匹配 TCP 端口和以太网地址。