需求目标:服务器已经配置了一个内网 ip ,假设是 1.1.1.1 ,同时还分配了一个公网 ip2.2.2.2,我想实现的效果是:无论什么样的请求到服务器,其 ACK 包的源 ip 全部修改为公网 ip2.2.2.2 。
尝试过在 iptables 的 POSTROUTING 中 SNAT 出站包并修改 ip ,但是实测这样只能修改本机主动发出的包,而对收到的请求的回复( ACK)包没有效果。
不知道有没有哪位有可行方向的建议?
1
lhbc 2017-01-27 10:19:20 +08:00 via iPhone
删掉内网 IP
|
3
lcdtyph 2017-01-27 10:43:30 +08:00
你的意思是修改 tcp 的第二个包的源 ip 么?
可是这么做没有任何意义啊,如果第二个包回应用的是内网 ip ,说明第一个 SYN 包的目的地址就是内网 ip ,你强行改成公网 ip 回应让客户端怎么应答啊= = |
5
lcdtyph 2017-01-27 10:52:05 +08:00
@treo 所以我觉得 lz 的目的没啥意义嘛,如果他不想让别人用内网 ip 连接服务器就直接把目的地址是内网 ip 的包 reject 掉好了= =||
|
6
eastpiger OP @lcdtyph #5 是这样的,我们的上级路由指向我的公网 ip 映射的时候没有做回源,于是产生了这样的情况:
内网 1.1.1.2 访问公网 2.2.2.2 ,发到路由器,路由器执行 DNAT 改为 1.1.1.2 发往 1.1.1.1 , 服务器收到消息,发送第二次握手,从 1.1.1.1 发往 1.1.1.2 ,客户端 DROP 而我这样修改了源 ip 之后就变成了: 服务器收到消息,发送第二次握手,从 1.1.1.1 发往 1.1.1.2 ,被我强制修改为 2.2.2.2 发往 1.1.1.2 ,客户端发回 ACK ,建立连接。 |
7
msg7086 2017-01-27 11:08:54 +08:00
为啥不是被路由器 DROP ?
|
8
eastpiger OP @lcdtyph #3 严格来说,我不仅想修改 SYN/ACK 包,我还想修改掉所有的 ACK 包,也就是这个服务器以后对外的联络全部都用公网 ip 的身份实现(以解决路由那边不做 SNAT 只做 DNAT 的问题),但是收到消息却都是从内网 ip 收到的(这一部分我改不了,上游路由也改不了)
这样服务器的网站以后再内网用内网 ip 就访问不了了,原因正如您所说的那样。但是好处在于我们的公网 ip 无论在公网还是在内网都能访问了。这样我 DNS 好歹能正常 work 。算是至少能用的一种方案吧 |
9
jasontse 2017-01-27 11:10:15 +08:00 via iPad
1.1.1.1: mdzz 2.2.2.2 我没找你啊
连接建立失败 |
10
eastpiger OP @jasontse #9 1.1.1.1 就是 2.2.2.2 、你确定没理解错么?
是 1.1.1.2 连接 2.2.2.2 ,被路由修改为 1.1.1.2 连接 1.1.1.2 ,然后服务器收到回复 1.1.1.1 到 1.1.1.2 ,被我改成 2.2.2.2 回复 1.1.1.2 ,建立连接成功。 |
14
gulucn 2017-01-27 11:29:28 +08:00 via Android
感觉你想的东西跟 http://m.chinabyte.com/soft/25/13169025_m.shtml 里面的第三种负载均衡方法相似
|
16
realityone 2017-01-27 13:28:13 +08:00
在 PREROUTING 里再加一条 DNAT 到 2.2.2.2 呢?
|
17
eastpiger OP @realityone 这个倒是没试过。。可是这个有什么关系么?出站的时候是 MAS 改成网卡 ip 了吧
|
18
zhjits 2017-01-28 00:46:38 +08:00
你这样改了以后包首先会被你的出口路由器干掉
|
19
yankebupt 2017-01-28 01:43:25 +08:00 via Android
在服务器本机上拦截所有入站到 1.1.1.1 包并真的把他们发到 2.2.2.2 不知道可行不(相当于 cancel 掉了路由对于之前目标地址的修改)(前提你的服务程序能绑定 2.2.2.2 )因为看别人好像这么干过……如果做不到,估计你需要更新一下拓扑图说明一下或者说明一下为什么不能绑定 2.2.2.2 的原因了…(或者说明一下我的做法的错误之处…毕竟不是专业的)
|
20
yankebupt 2017-01-28 01:46:01 +08:00 via Android
@realityone 忘了看,上面好像有人说过了
|
21
ryd994 2017-01-28 08:08:11 +08:00 via Android
懂不懂什么叫 TCP 四元组?
|
22
mengskysama 2017-01-28 09:47:48 +08:00 via iPhone
这个拓扑不全吧,服务器回包到上级路由肯定回 drop 掉伪造源地址的包。除非经过特殊配置。
|