端口映射
# 原理
端口映射就是将内网中的主机的一个端口映射到外网主机的一个端口,提供相应的服务。当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上
如图所示
192.168.213.212服务器拥有外网权限,并开放了7070端口。此时在外网环境下需要访问到192.168.213.213服务器的6060端口,就需要在212服务器上做端口映射。将7070端口转发到213服务器的6060端口。
# 实现
# 方式一(Nginx)
配置文件与http同级,如下将本机端口7070转发到213服务器的6060端口
stream{
upstream mysqlmaster {
server 192.168.213.213:6060 weight=1;
}
server {
listen 7070;
proxy_upload_rate 102400;
proxy_download_rate 102400;
proxy_pass mysqlmaster;
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 方式二(firewall)
在服务器192.168.213.212上执行此下命令
1.开启系统ipv4转发
sysctl -w net.ipv4.ip_forward=1
或
echo 1 > /proc/sys/net/ipv4/ip_forward
2.开启防火墙
systemctl start firewalld.service
3.添加端口
firewall-cmd --zone=public --add-port=7070/tcp --permanent
4.开启防火墙端口转发功能
firewall-cmd --permanent --add-masquerade
5.防火墙端口转发,将本地7070端口转发到192.168.213.213端口6060
firewall-cmd --permanent --zone=public --add-forward-port=port=7070:proto=tcp:toaddr=192.168.213.213:toport=6060
6.重启防火墙
systemctl restart firewalld.service
或
firewall-cmd --reload
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
其他命令
7.查询开放的端口
firewall-cmd --list-ports
8.查询端口转发列表
firewall-cmd --list-forward-ports
8.查询端口转发功能是否开启
firewall-cmd --query-masquerade
9.删除端口转发
firewall-cmd --permanent --zone=public --remove-forward-port=port=7070:proto=tcp:toaddr=192.168.213.213:toport=6060
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 方式三(iptables)
使用nat转发方式
# 方式四(rinetd)
若要作为组件连接工具要慎用,参考此篇文章:
rinetd占用CPU较高,导致转发服务异常
# 特殊应用
# KAFKA端口转发
# 起因
前提了解
kafka需要设置advertised.listeners可连接地址及端口,例:设置192.196.213.213:9092,微服务则需要使用92.196.213.213:9092这个地址连接
本次设置kafka.ok96.cn:9092
情况:
- 虚拟机172.16.200.201和172.16.200.202服务器处于同一内网,端口访问无限制
- 服务器192.168.213.212外网ip为14.215.177.x 开放端口7070
- 在172.16.200.202服务器上安装了kafka
需求:
- 在172.16.200.201服务器上的微服务需要连接kafka
- 在外网14.215.177.y服务器上的微服务需要连接kafka
特殊说明:
- 服务器14.215.177.x外网7070端口不能变换
【若可以直接使用9092则不需要在14.215.177.y上做端口转发啦】 - 服务器172.16.200.201网络连接不能通过外网ip回流到172.16.200.202
【若可以,则只需将advertised.listeners设置为公网ip即可,不需要再做端口转发,不需要再做hosts映射】
# 情况图
# 解决
# 思路流程图
上次更新: 2023/03/14, 05:49:29