技术解析

iptables 的转发问题
0
2021-06-22 09:43:39
idczone
我现在有一台国内的服务器,但是因为某些问题,禁止国际网络了(攻击太多),然后现在导致无法连接到 s?eam 的服务器,但是使用 iptables 作为转发是可以连接上去,服务端上显示的 ip 是 iptables 的那个 IP,所以我想求助一下 iptables 如何只进行包转发,而不改变来源 IP ?
可能话说的比较多,但是简易演示如下:
A 服务器:1.1.1.1
B 服务器:2.2.2.2
C 服务器:国外

由于 A 服务器 无法连接到 C 服务器,所以想利用 B 服务器进行中转一下,连接到 C 服务器。
目前是 A 可以通过 B 连接到 C,但是 C 上显示的是 B 的服务器 IP,我想 B 上面以 A 的 IP 进行中转。C 服务器获得的 IP 不是 B 的服务器 IP。请问有方法吗?
不作地址转换,那么只开启包转发这也是可以实现,只是也有条件的,以下建议基于一些之前类似的实践,建议你先在试验环境测试:
条件:
A 和 B 可顺利双向收发数据,
B 和 C 可顺利通讯,
A 可以收到 C 发来的数据(很重要)
作法:
B 开启 网络转发功能( ip_forwarding = 1,防火墙可关闭,或者针对 A C 都双向放行)
A 机上 route 指令 /网卡配置 增加一些路由策略:
目标是 C 网段 /IP 的 下一跳 gw 是 B 的 ip
如此,B 会收到 A 发来目标是 C 的包转给 C,
C 收到后,因为来源是 A,则响应 /反馈 直接发给 A

你这是 ip spoofing,很可能出不了运营商的网络

感谢您的回复,A 无法直接连接至 C,但是通过 B 可以。所以我想中转一下,但是不修改来源 IP,
目前的情况是 C 点收到的 IP 是 2.2.2.2 (也就是 B 的 IP ) ,但是我没办法让他收到的 IP 是 1.1.1.1 ( A 的 IP )
(A 和 B 我都有直接管理权限,C 点只作为收),所以想在 B 上做一个转发,让 A 通过 B 连接到 C,C 得到的 IP 是 A 的 IP 即可。

您好,我也测试过了,可以访问.但是无法被提交至 s?eam 的服务器,因为获取的 public 的 IP 是 B 的 IP。

不可能实现,首先你这是 NAT,如果在 B 上把源 IP 改为 A 的 IP,那么回程路径就不会经过 B。

建议补一下 路由&交换 知识

也可以试试,在 iptables 上我没找到修改源的东西,请问有例子吗?

mangle 链专门用于修改包信息

如此这般,那不能实现。
C 机收到了“来自 A ” 的请求,当然是发回给 A 了,
C 它不会发回给 B 的,除非 B 就是 C 的 默认路由 /默认网关,
或者 你能控制 C 机,增加一条 目的到 A 的数据包 就发给 B

web 服务里,proxy 和 后段 web server 的确是可以做到这种需求,
但是,这得对中转 proxy 和 web server 都有特别设定才行,
假若是你这个例子,那么就是 B, C 都必须你自己掌控才可。

A 在 nat 表的 output 链做 dnat 到 B,B 再 DNAT 到 C,这时候 C 获得的地址是 A 的地址,所以回应的时候直接回到 A 去了,中间如果没有干扰应该可以通信,有干扰就没辙了,除非你能控制 C 服务器,让它把应该发往 A 的包转发到 B 上去

首先,iptables 不负责转发
你先理解完这一句再重新提问吧

VPN

在 1 楼的基础上,在 B 上加个 SNAT 应该可行

楼主这个是 B 做一个路由器,还是在公网上面的,这就有点尴尬了

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服