iptables 的转发问题

2018-12-21 13:48:13 +08:00
 evansfix
我现在有一台国内的服务器,但是因为某些问题,禁止国际网络了(攻击太多),然后现在导致无法连接到 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。请问有方法吗?
3157 次点击
所在节点    Linux
14 条回复
likuku
2018-12-21 14:16:34 +08:00
不作地址转换,那么只开启包转发这也是可以实现,只是也有条件的,以下建议基于一些之前类似的实践,建议你先在试验环境测试:

条件:
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
dbw9580
2018-12-21 14:20:09 +08:00
你这是 ip spoofing,很可能出不了运营商的网络
evansfix
2018-12-21 14:37:09 +08:00
@likuku 感谢您的回复,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 即可。


@dbw9580 您好,我也测试过了,可以访问.但是无法被提交至 s?eam 的服务器,因为获取的 public 的 IP 是 B 的 IP。
mason961125
2018-12-21 14:49:42 +08:00
不可能实现,首先你这是 NAT,如果在 B 上把源 IP 改为 A 的 IP,那么回程路径就不会经过 B。
mason961125
2018-12-21 14:51:50 +08:00
建议补一下 路由&交换 知识
evansfix
2018-12-21 14:56:25 +08:00
@mason961125 也可以试试,在 iptables 上我没找到修改源的东西,请问有例子吗?
mason961125
2018-12-21 14:57:33 +08:00
@evansfix mangle 链专门用于修改包信息
likuku
2018-12-21 15:47:36 +08:00
@evansfix 如此这般,那不能实现。

C 机收到了“来自 A ” 的请求,当然是发回给 A 了,
C 它不会发回给 B 的,除非 B 就是 C 的 默认路由 /默认网关,
或者 你能控制 C 机,增加一条 目的到 A 的数据包 就发给 B
likuku
2018-12-21 15:50:18 +08:00
web 服务里,proxy 和 后段 web server 的确是可以做到这种需求,
但是,这得对中转 proxy 和 web server 都有特别设定才行,
假若是你这个例子,那么就是 B, C 都必须你自己掌控才可。
lieh222
2018-12-21 17:22:21 +08:00
A 在 nat 表的 output 链做 dnat 到 B,B 再 DNAT 到 C,这时候 C 获得的地址是 A 的地址,所以回应的时候直接回到 A 去了,中间如果没有干扰应该可以通信,有干扰就没辙了,除非你能控制 C 服务器,让它把应该发往 A 的包转发到 B 上去
julyclyde
2018-12-21 17:54:24 +08:00
首先,iptables 不负责转发
你先理解完这一句再重新提问吧
LGA1150
2018-12-21 19:45:10 +08:00
VPN
sunznx
2018-12-21 20:54:41 +08:00
在 1 楼的基础上,在 B 上加个 SNAT 应该可行
azh7138m
2018-12-22 11:44:03 +08:00
@likuku 楼主这个是 B 做一个路由器,还是在公网上面的,这就有点尴尬了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/519720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX