场景:
我用 openvpn 搭建了一个服务器(S)。
并且可能有多个 vpn 客户端(C1~C10)在“S”后面提供 SSH/FTP/HTTP。
互联网上的多个用户(U1~U10)将通过“S”登录以访问他们自己的机器(C1~C10)。
假设 U3 ip 为 60.60.60.60,
S ip 为 220.220.220.220,
C3 vpn ip 为 10.8.0.6
,转发端口为“55555”
如果用户(U3)输入正确的用户/密码
--> 'S' 将查询哪个客户端(C3)属于该用户并获取其 IP,
然后动态将用户(U3)转发到他的客户端(C3):
//(only the 60.60.60.60 can access 10.8.0.6)
iptables -t nat -I PREROUTING -i eth0 -s 60.60.60.60 -p tcp --dport 55555 -j DNAT --to-destination 10.8.0.6:80
到目前为止一切顺利。
但在用户注销后,我使用以下命令删除此规则
iptables -t nat -D PREROUTING -i eth0 -s 60.60.60.60 -p tcp --dport 55555 -j DNAT --to-destination 10.8.0.6:80
这条规则在 iptables -t nat -L -n 中已经不存在了,
但是用户 U3 仍然可以通过 220.220.220.220:55555 直接访问 C3
即使我输入以下内容并重新启动,该规则仍然有效。
iptables -t -nat -F
救命!有人能告诉我哪里出了问题吗,或者有更好的方法吗
我已发现问题所在。
我使用 HTTP 测试了上述内容,但在“U3”端有一个代理服务器。
也就是说,你看到的是代理缓存的旧数据。
尝试其他协议,例如SSH或者NC,结果是正确的。
但是...这意味着如果用户使用代理,这个 iptables 机制可能无法正常工作,
我该如何解决这个问题?
答案1
但是...这意味着如果用户使用代理,这个 iptables 机制可能无法正常工作。我该如何解决这个问题?
您可以提供内容Cache-Control: no-cache, no-store
并希望代理尊重这一点。