【问题标题】:How do I get the original destination IP of a redirected connection with pf on FreeBSD?如何在 FreeBSD 上使用 pf 获取重定向连接的原始目标 IP?
【发布时间】:2017-10-10 20:46:39
【问题描述】:

当我在 Linux 上使用 -j REDIRECT 规则重定向与 iptables 的连接时,接收重定向连接的程序可以执行 getsockopt(sockfd, SOL_IP, SO_ORIGINAL_DST, &val, &len); 以获取连接的原始、重定向前的目标 IP。当我在 FreeBSD 上使用 rdr 规则重定向与 pf 的连接时,我该如何做同样的事情?

【问题讨论】:

    标签: firewall freebsd nat


    【解决方案1】:

    昨天刚在MacOS上解决了这个问题,没在FreeBSD上测试,我觉得差不多吧。

    您需要来自net/pfvar.h 的 pfioc_natlook 结构。

    一般步骤是:

    • pfioc_natlook初始化为pnl
    • 用客户端套接字的 ip 和端口(saddr,sxport),代理服务器的绑定 ip 和端口(daddr,dxport)填充 pnl
    • open('/dev/pf'),获取它的 fd
    • 执行ioctl(fd, C.DIOCNATLOOK, *pnl),然后pnl的rdxportrdaddr将是连接的原始端口和ip

    任何对此问题仍然感兴趣的人可以查看这个要点:https://gist.github.com/gkoyuncu/f8aad43f66815dac7769

    我用 golang(CGO 包装器)做了一个迷你 POC 程序,它可以在 MacOS 上运行:https://github.com/monsterxx03/pf_poc

    【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多