在我的服务器中我想重定向所有请求:从 81 端口到 8080 端口
由于 Jenkins 服务不允许在 80 端口监听,因此我遵循 Jenkins 文档 詹金斯 - 反向代理使用firewalld。
但没有工作,下面是我的步骤和一些系统详细信息:
- CentOS 版本 = 7.9.2009
[root@xxx ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
- 我已经在firewalld中启用了端口并添加了端口转发规则:(已经添加永久并重新加载firewalld)
[root@xxx ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160 lo
sources:
services: dhcpv6-client http ssh
ports: 80/tcp 443/tcp 81/tcp
protocols:
masquerade: yes
forward-ports: port=81:proto=tcp:toport=8080:toaddr=
source-ports:
icmp-blocks:
rich rules:
- 检查网络状态:
[root@xxx ~]# netstat -tulpn | grep LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1090/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1724/master
tcp6 0 0 :::8080 :::* LISTEN 1107/java
tcp6 0 0 :::22 :::* LISTEN 1090/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1724/master
仅可监听 8080/22/25。
- 我尝试使用 nc 工具来检查端口转发:
[root@xxx ~]# nc -v 127.0.0.1 8080
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:8080.
^C
[root@xxx ~]# nc -v 127.0.0.1 81
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.
8080 可以,但是 81 转发不起作用。
- 有些参考资料说需要设置 net.ipv4.ip_forward=1。我之前也设置过了:
[root@xxx ~]# sysctl -a |grep "ip_forward"
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens160.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
- 仔细检查我的 iptables,我没有设置 iptables:
[root@xxx ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@xxx ~]# systemctl status iptables
Unit iptables.service could not be found.
关于如何使用firewalld进行“端口转发”,您有什么想法吗?谢谢。
答案1
最后,我找到了一个解决方案。还有一件事,netstat 无法检查端口转发。
需要为 lo 添加直接规则:
[root@xxx ~]$ firewall-cmd --direct --get-all-rules
ipv4 nat OUTPUT 0 -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080