在 OS X 中使用 PacketFilter 透明代理数据包

问题描述 投票:0回答:1

有一个很酷的实用程序,称为 sshuttle。过去一直依靠

ipfw
来转发数据包。看起来
ipfw
在 Mavericks 中大部分都被破坏了,建议现在使用 PacketFilter。

我花了大半天的时间研究 PacketFilter,发现

ipfw
有一个 PacketFilter 不支持的功能(希望我是错的)。

以下规则:

ipfw -q add 12300 fwd 127.0.0.1,12300 tcp from any to any not ipttl 42 keep-state setup

会将所有流量转发到 127.0.0.1 (localhost) 端口 12300。但是,它不会更改 TCP 数据包中的目标 IP 或端口。这对于 sshuttle 很重要,因为它使用有关原始目的地的信息将数据包转发到另一个网络。

我在 PacketFilter 世界中能找到的最接近的规则是:

rdr pass proto tcp from any to any -> 127.0.0.1 port 12300

此规则确实将流量发送到 127.0.0.1(本地主机)端口 12300,但它也将目标地址重写为 127.0.0.1。

关于如何在 OS X 中获取行为 sshuttle 需求有什么想法吗?

macos networking osx-mavericks firewall openbsd
1个回答
0
投票

为什么不尝试一下

Loopback Alias
:

  1. 为环回接口创建自定义别名
    127.0.0.2
  2. 然后,将流量重定向到
    127.0.0.2:12300

这样即使

pf
将目的IP改写为127.0.0.2,也会和
127.0.0.1
不同。这或许可以让您区分 IP 地址之间的流量。

ifconfig lo0 alias 127.0.0.2

那么对于你的

pf
规则,你可以这样做:

rdr pass proto tcp from any to any -> 127.0.0.2 port 12300

如果这不起作用,是否可以使用像redsocks这样的第三方软件包?请记住,这不会是确切的

ipfw
功能的直接替代品,但是,通过一些配置和可能的一些脚本,也许这可以用于实现类似的目的。

如果您的主要目标是专门使用

sshuttle
,我建议您研究该项目可能出现的任何更新或分支,以解决 macOS 的更改,如前所述。

© www.soinside.com 2019 - 2024. All rights reserved.