Linux环境下如何仅用iptables实现80/443端口流量转发至另一服务器
用iptables实现Linux端口转发(80/443)
先开启内核IP转发,Linux默认关闭这个功能,必须打开才能实现转发:
- 临时生效(重启后失效):
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效(重启后依然有效):
编辑/etc/sysctl.conf,找到net.ipv4.ip_forward = 0这一行,改成net.ipv4.ip_forward = 1,然后执行sysctl -p让配置立即生效。
接下来配置iptables转发规则,把Server-A的80/443流量转到Server-B(把下面的192.168.1.100替换成你的Server-B实际IP):
80端口转发配置
# 将Server-A上的入站80端口流量转发到Server-B的80端口 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 # 让Server-B的响应能正确回传给客户端 iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE
443端口转发配置
和80端口逻辑完全一致,直接替换端口即可:
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.100:443 iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.100 --dport 443 -j MASQUERADE
保存规则避免重启丢失
不同Linux发行版保存命令不一样:
- Debian/Ubuntu系列:
iptables-save > /etc/iptables/rules.v4 - RHEL/CentOS系列:
service iptables save或者iptables-save > /etc/sysconfig/iptables
这个配置完全符合你的需求:客户端只和Server-A交互,所有请求/响应都通过Server-A中转,Server-B不需要做任何HTTP/HTTPS配置改动,全程用iptables实现端口转发。
内容的提问来源于stack exchange,提问作者Dmitry
相关产品推荐
相关产品推荐

