我们使用 Varnish 作为我们的前端网络缓存和负载平衡器,所以我们在我们的开发环境中有一个 Linux 服务器,在一对 Windows 2008 IIS Web 服务器上运行带有一些基本缓存和负载平衡规则的 Varnish。
我们有一个指向 *.development 的通配符 DNS 规则,因此我们可以浏览http://www.mysite.com.development、http://www.othersite.com.development等。问题是由于 Varnish 无法处理 HTTPS 流量,我们无法访问https://www.mysite.com.development/
对于开发/测试,我们不需要任何加速或负载平衡——我只需要告诉这个盒子充当一个哑代理,并将端口 443 上的任何传入请求转发到特定的 IIS 服务器。我怀疑 iptables 可能会提供解决方案,但自从我编写 iptables 规则以来已经有很长一段时间了。一些最初的黑客攻击让我达到了
iptables -F
iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 10.0.0.241:443
iptables -t nat -A POSTROUTING -p tcp -d 10.0.0.241 --dport 443 -j MASQUERADE
iptables -A INPUT -j LOG --log-level 4 --log-prefix 'PreRouting '
iptables -A OUTPUT -j LOG --log-level 4 --log-prefix 'PostRouting '
iptables-save > /etc/iptables.rules
(其中 10.0.0.241 是托管 HTTPS 网站的 IIS 框),但这似乎不起作用。
澄清一下 - 我意识到 HTTPS 代理/缓存存在安全隐患 - 我正在寻找的是完全透明的 IP 流量转发。我不需要解密、缓存或检查任何数据包;我只希望端口 443 上的任何内容都通过 Linux 机器流到它后面的 IIS 机器,就好像 Linux 机器根本不在那里一样。
任何帮助感激不尽......
编辑:包括完整的 iptables 配置脚本。
这是将流量从一个主机重定向到特定端口中的另一台主机的方法,请注意,对端口 443 的每个请求都将重定向到您在 iptables 上指向的主机:
1)开放443端口流量:
2) 添加特定规则以重定向传入和传出数据
3)或者,您可以重定向来自特定主机的流量,例如:
(如果你想在你网络下的其他客户端中处理端口 443,此步骤特别有用)
4)通知内核你将接受ip转发
编辑文件/etc/sysctl.conf(或适合您的发行版的文件)并附加(或更改)
然后发出命令
我希望它有所帮助
好的,这是完整的解决方案——这是在 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) 上
首先,我必须通过编辑 /etc/sysctl.conf 并取消注释行来启用 ip4 端口转发:
然后我必须运行
/sbin/sysctl -p
才能使此更改生效。接下来配置(和捕获)
iptables
规则脚本:最后,为了使更改在重新启动后持续存在,我必须编辑 /etc/network/interfaces: