具有自定义逻辑的桥接器/路由器

具有自定义逻辑的桥接器/路由器

我有一个带有 3 个网络适配器的 Linux 盒子,我想对其进行如下配置:

  1. 适配器 A 连接到计算机 A
  2. 适配器 B 连接到计算机 B
  3. 适配器 C 连接到互联网。具体来说,到 someserver.com

我想达到的目标:

  1. 来自 A 的所有流量都会流向 Internet
  2. 在适配器 B 上定义特殊的“秘密端口”
  3. 来自计算机 B 前往“秘密端口”上的“someserver.com”的 TCP 流量将伪装其源 IP,使其显示为来自计算机 A
  4. 从“someserver.com”返回计算机 A 并到达 #3 中使用的相同端口的 TCP 流量将重定向到计算机 B。

我需要实施路由器或网桥吗?我可以仅通过配置 NetFitler/ip 表来完成此操作还是应该实现一些代码?如果是代码,我应在哪一层与 IP 堆栈集成?

答案1

对于一般访问,您必须使用 MASQUARADE / SNAT(取决于 C 上的 IP 地址是动态还是静态)。

假设目前的情况是你的电脑A有静态 IP 地址a.a.a.a,并且您的计算机B有静态 IP 地址 b.b.b.b。两者都有默认网关电脑C。和Someserver.com具有静态 IP 地址r.r.r.r和秘密端口是pppp

你会配置电脑C作为路由器,它有到互联网的默认路由接口C(它已经做到了这一点,要么通过静态配置,要么通过 PPPoE 动态设置等)。这本身就可以完成1.

现在,你有两种可能性:

  1. 制作电脑A路由器也是。然后你改变计算机B配置,所以它的默认路由是通过电脑A(并不是电脑C和以前一样),并配置电脑A像这样:

    iptables -t nat -s b.b.b.b -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
    

    这将使所有从源 IPb.b.b.b到目标 IPr.r.r.r和目标端口的 TCP 数据包pppp假装它们来自a.a.a.a,从而完成3来自的流量某服务器网站将返回到源地址 ( a.a.a.a),该地址将被解码为电脑A并发送回计算机B。 (从而完成4

    这更容易,但要求计算机 B 运行支持此类 NAT 策略的操作系统。

  2. 改变电脑A拥有像10.0.1.100/24和这样的私有IP计算机B拥有私有IP 10.0.2.100/24。然后在电脑C做:

    ip addr add a.a.a.a/nn dev ifaceC
    ip addr add b.b.b.b/nn dev ifaceC
    iptables -t nat -s 10.0.1.100 -j SNAT --to a.a.a.a
    iptables -t nat -s 10.0.2.100 -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
    iptables -t nat -s 10.0.2.100 -j SNAT --to b.b.b.b
    

    nn你的网络掩码在哪里,ifaceC你的名字在哪里接口C。那会把电脑A计算机B在私人范围内,从而允许电脑C到网络地址转换电脑Aa.a.a.a(所以它的行为就像以前一样),以及 NAT计算机B要么到a.a.a.a(如果满足dst= r.r.r.r, dport=条件)或到(否则)。ppppb.b.b.b

这不需要任何特殊支持电脑A也不计算机B,但把它们抛在了后面网络地址转换这可能会影响其他一些事情。

当然,在这个年龄,应该提到的是,上述内容只适用于好的老'IPv4地址(最后一个是迅速被用完)而不是在IPv6

答案2

根据您的评论:

@Marki - 计算机 A 和 B 在互联网上。当他们访问 someserver.com 时,他们总是从我的 Linux 机器上访问(例如特定路由)。 A和B合作。有时,我们希望计算机 B 访问 someserver.com,而某些服务器不知道请求来自另一台计算机。

我在这里错过了什么吗?如果将计算机 C 设置为路由器,则来自 A 和 B 的请求将无关紧要。根据 NAT 规则,A 和 B 的私有/公共 IP 地址都将与计算机 C 的公共 IP 地址进行交换。因此,如果 C 是您网络链中的最后一个网关,某个服务器将看到来自 C 的所有请求,C 会将它们路由回 A 和 B。

为此,计算机 C 需要两张网卡,一张连接到专用 LAN,另一张连接到公共 WAN。

下面是 Matija 的数字 2
如果您希望计算机 B 模仿计算机 A,B 必须在到达 C 之前过滤通过 A 的流量。我不明白这对您的“用例”有什么帮助,因为计算机 C 只能看到来自计算机 A 的流量,但无论如何:

某个服务器永远不会看到来自 A 或 B 的私有地址。您在这里的情况有点过分了,因为您所需要做的就是在计算机 C 上启用端口转发,以便所有端口都转发到计算机 B 的私有 IP 地址。

答案3

您可以通过在 A 上安装代理来解决此问题,该代理将侦听 B/SecretPort 并将其转发到 SomeServer。使用 SecretPort 在 A 上选择的答案将转发给 B。

相关内容