AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 413545
Accepted
Lapsio
Lapsio
Asked: 2017-12-29 13:36:16 +0800 CST2017-12-29 13:36:16 +0800 CST 2017-12-29 13:36:16 +0800 CST

iptables -j REDIRECT *actually* 对数据包头做了什么?

  • 772

出于好奇,我正在阅读一些关于透明 TOR 代理的教程,因为从网络的角度来看,这是一个非常有趣的话题。与只使用tun/tap接口并且我完全清楚的 VPN 网关相反,TOR 代理使用单个端口。所有教程都重复魔术线:

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

eth0输入 (LAN) 接口在哪里,并且9040是一些 TOR 端口。问题是,从网络的角度来看,我完全不明白为什么这样的事情是有意义的。

根据我对redirect/ dst-natchains 的理解以及它在物理路由器中的工作方式,dst-natchain takedst-port和dst-addr BEFORE路由决定被采取并将它们更改为其他东西。例如:

  • 之前dst-nat:192.168.1.2:46364 -> 88.88.88.88:80
  • 之后dst-nat:192.168.1.2:46364 -> 99.99.99.99:8080

并且99.99.99.99:8080是 IP 数据包流通道中的其他链所看到的(例如filter表),这就是数据包从现在开始在离开设备后的样子。

现在互联网上的许多人(包括在这个stackexchange上)声称这与设置为接口的本地地址redirect基本相同。鉴于此,这条规则:dst-natdst-addr

iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

显然没有意义。如果这就是它的工作方式,那么 TOR 将获取所有带有 destination 的数据包127.0.0.1:9040。对于应用程序获取数据包并以某种方式响应它的典型应用程序(例如 Web 服务器),这是完全有意义的,因为毕竟,这样的服务器进程是数据包的最终目的地,所以目的地地址是 localhost 是可以的。但是TOR路由器很好......一个路由器,所以它必须知道数据包的原始目的地。我错过了什么吗?不DNAT影响本地应用程序接收什么?还是REDIRECT指令的特定行为?

routing iptables
  • 2 2 个回答
  • 7821 Views

2 个回答

  • Voted
  1. Best Answer
    user280720
    2018-03-15T11:18:23+08:002018-03-15T11:18:23+08:00

    看看这个答案:透明 SOCKS 代理如何知道使用哪个目标 IP?

    引述:

    iptables 会覆盖原始目标地址,但它会记住旧地址。然后应用程序代码可以通过请求一个特殊的套接字选项来获取它,SO_ORIGINAL_DST.

    • 5
  2. Jichao
    2019-07-18T19:22:30+08:002019-07-18T19:22:30+08:00

    实际上,您对 TOR 是正确的,收到的每个 tcp 数据包都重定向到 localhost:9040。

    目标 REDIRECT 是 DNAT 目标的特殊类型,它将 ip 地址更改为本地接口并映射到您指定的端口。

    假设有一个路由器的 lan 接口是eth0(带有网络192.168.1.0/24和 ip 地址192.168.1.1:),并且该路由器的 iptables 规则是:

    iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040

    然后来自局域网内客户端的所有 tcp 数据包将重定向到192.168.1.1:9040.

    假设局域网内有从客户端(带有 ip 地址192.168.1.2)到 google.com(假设 ip:)的 tcp 连接,8.8.1.1那么,

    原始请求: 192.168.1.2:12345 -> 8.8.1.1:80

    在路由器的预路由链之后:192.168.1.2:12345->192.168.1.1:9040

    • 0

相关问题

  • 关于 MASQUERADE 和 SNAT/DNAT 的一点疑问

  • iptables 不过滤桥接流量

  • 持久的 iptables

  • Iptables 规则允许 appVM 通过配置为仅通过 QubesOS 中的 VPN 的 proxyVM

  • 如何在 Linux 中让所有流量通过一个接口

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve