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
    • 最新
    • 标签
主页 / server / 问题 / 1007629
Accepted
Christian Deacon
Christian Deacon
Asked: 2020-03-20 14:59:09 +0800 CST2020-03-20 14:59:09 +0800 CST 2020-03-20 14:59:09 +0800 CST

在欺骗源 IP 时直接从 IPIP 端点隧道将流量发送回客户端

  • 772

我在 Linux (Ubuntu 18.04) 上制作了一个 C 程序,通过 IPIP 将流量转发到另一台服务器。当 IPIP 端点发回回复时,程序也会在剥离外层 IP 标头后将数据发回给客户端。机器流量上的应用程序和 IPIP 隧道端点被转发到位于网络命名空间内,IPIP 隧道是默认路由。这一切都很好。但是,我想实现一些东西,以便应用程序通过POSTROUTINGIPTables 中的链将源 IP 地址欺骗到转发机器 IP 来直接将流量发送回客户端。这将减少转发机器上的负载,因为应用程序不需要通过 IPIP 隧道将流量发送回客户端,我相信它会使其更加一致。

为此,我尝试设置一个 veth 对,其中一个 veth 在默认网络命名空间中,而对等 veth 在应用程序的自定义网络命名空间中。我还在主网络命名空间上设置了一个网桥,为其分配了一个 IP 地址,并在POSTROUTING链中创建了一个 SNAT 规则,以将流量作为特定 IP 输出。然后,我在主网络命名空间上桥接了 veth 接口。应用程序仍然绑定到 IPIP 隧道,但是当它需要发送出站流量时,它会通过默认路由发送流量。因此,我将默认路由设置为网络命名空间内的 veth 接口。

所有这些大部分都在起作用。来自应用程序的流量直接发送回客户端,客户端响应转发服务器。然后将流量发送回服务器,流量通过 IPIP 转发到。我通过tcpdump. 但是,我正在运行的应用程序没有处理回复。我相信这样做的原因是应用程序期望响应返回到veth接口(默认路由),因为这就是它用来将回复发送回客户端的方式。不幸的是,该应用程序是闭源的,所以我无法检查代码。但是,我可能会创建一个测试 C 程序,该程序使用默认路由发送出站连接并进行进一步的故障排除。

我只是想知道是否有人对此有建议。我已经阅读了一些关于通过 IPTables 标记数据包的内容。我不完全确定在客户端回复并将其发送到转发服务器后该标记是否会保留。

我相信在 IPIP 隧道上会出现某些流量,然后在默认路由上会出现其他流量。在我的例子中,连接到应用程序的客户端正在向 IPIP 隧道发送流量,而 IPIP 隧道正在等待它。但是,该应用程序还与骨干网建立出站连接,我相信这是网络命名空间内默认接口上预期的流量类型。

在默认路由上预期所有流量的情况下,是否可以将流量从转发服务器转发到此特定接口,同时删除 IPIP 协议(​​剥离外部 IP 标头等)?我认为这需要在流量到达 IPIP 隧道后发生。

话虽如此,我想使用 IPIP 的原因是因为我可以在目标机器上执行 NAT(使用内部 IP 标头的目标地址将流量转发到 IPIP 隧道)。因此,我宁愿不要摆脱 IPIP 隧道。

非常感谢任何帮助,如果您需要更多信息,请告诉我!

networking tunnel
  • 1 1 个回答
  • 233 Views

1 个回答

  • Voted
  1. Best Answer
    Christian Deacon
    2020-05-15T04:46:08+08:002020-05-15T04:46:08+08:00

    我只是想提供一个更新。在发布这个问题大约一周后,我通过创建一个自动将出站 IPIP 数据包直接发送回客户端的 TC BPF 程序解决了这个问题。对于那些感兴趣的人,请随时在这里查看。

    谢谢!

    • 0

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve