Ubuntu 20系统下如何通过iptables或CSF实现指定域名的请求端口转发(适配不可修改API地址的编码文件场景)
Ubuntu 20系统下如何通过iptables或CSF实现指定域名的请求端口转发(适配不可修改API地址的编码文件场景)
我完全懂你的处境——编码后的文件没法修改里面的API地址,本地网络又连不上目标服务,只能靠SSH端口转发绕路,现在就差把对目标域名的HTTPS请求自动转到你本地的9999端口对吧?下面我给你分别讲讲用iptables和CSF两种方案的具体操作:
一、用iptables直接实现
因为你已经把my.api.site.com在/etc/hosts里指向了127.0.0.1,所以本地程序发起的请求其实是打向回环地址的443端口,我们只需要把这个请求转发到本地的9999端口(也就是你SSH隧道监听的端口)即可:
- 添加DNAT转发规则
执行这条命令,把目标为127.0.0.1:443的本地请求重定向到127.0.0.1:9999:
iptables -t nat -A OUTPUT -d 127.0.0.1 -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:9999
- 确保转发权限(可选,但保险)
虽然本地回环的转发默认是允许的,但还是可以加这条规则确保无异常:
iptables -A FORWARD -d 127.0.0.1 -p tcp --dport 9999 -j ACCEPT
- 保存规则,避免重启失效
Ubuntu 20可以用下面的命令把规则持久化:
iptables-save > /etc/iptables/rules.v4
二、用CSF(ConfigServer Security & Firewall)实现
如果你平时用CSF管理防火墙,直接在CSF里加自定义规则就行,不用手动操作iptables:
- 编辑CSF的nat规则配置文件
打开/etc/csf/csf.postnat(这个文件专门用来添加nat表的自定义规则,CSF启动时会自动加载):
nano /etc/csf/csf.postnat
- 添加转发规则
在文件末尾加入和iptables一样的DNAT规则:
iptables -t nat -A OUTPUT -d 127.0.0.1 -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:9999
- 重启CSF让规则生效
csf -r
额外注意事项
- 你的SSH隧道要保持运行,建议加
-fN参数让它后台静默运行:ssh -fNL 0.0.0.0:9999:my.api.site.com:443 root@remote - 测试的时候可以用
curl -v https://my.api.site.com/v1,看请求是否成功走了本地的9999端口;也可以用netstat -tulpn | grep 9999确认SSH在正常监听该端口。
备注:内容来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

