Linux 内部端口转发
问题背景
通过 frp
+ docker
实现了外网访问小主机的 nextcloud 云盘(开放8080端口),问题在于 80 端口被占用,只好用域名+端口的形式来实现访问,如 xxx.wuzhiping.top:8080
,不够优雅,想把域名后面的端口号直接去除。
一顿查阅各种资料,找到了 Linux 内部端口转发的方法,即外部访问80端口时( http 域名的默认端口)内部转发到8080端口,实现不填写端口号即可访问。
环境简述
- 本地主机:docker 搭建了 nextcloud 服务
- 远程主机:阿里云服务器,固定ip,Ubuntu21 系统
- 远程访问:frp 实现二级域名转发到本地主机上的 nextcloud(云主机8080端口映射本地主机 nextcloud 的端口)
- iptables 如未安装,可通过命令
sudo apt install iptables-services
关键步骤
- 准备:释放内部端口转发的功能
编辑 /etc/sysctl.conf
,取消这一行的注释
1 |
|
- 保存并验证上一步的操作
保存文件,通过命令确认是否生效,打印出的是 net.ipv4.ip_forward=1
即生效
1 |
|
- 手动操作内部端口转发
基本命令及释义:
1 |
|
参数释义:
-t: table table to manipulate (default: `filter’)
-A: 向规则链中添加条目
PREROUTING链:用于目标地址转换(DNAT),路由前。
-p:指定要匹配的数据包协议类型;
–dport: 目的端口,即客户端要访问的端口
-j: jump 指定要跳转的目标
REDIRECT: 重定向、映射、透明代理
–to-port: 跳转到的端口号
以本次要解决的问题为例,外网输入网址–访问80端口–内部转发至8080端口–获取对 nextcloud 服务的访问
1 |
|
保存配置
1 |
|
- 查询与撤销操作
1 |
|
找到 Chain PREROUTING (policy ACCEPT)
这一栏,注意查看 num
序号
删除指定表的指定链上的规则, -D 并指定对应序号即可(对应的序号会及时变动)。
1 |
|
彩蛋:高级玩法
一点小思考:明白了内网中转的办法,想到一个场景,通过一台远程主机管理另一台远程主机,相当于一台跳板,不过前提是两台主机都要有固定 ip 才行吧!
要是未来 ipv6 全面普及了,估计能解放不少生产力!
这个网站可以测测自己是不是有 ipv6地址:IPv6 测试
Ref
- linux中通过iptables实现端口转发 - 知乎
- Linux将8080端口转发到80端口_Evanism_小风铃的博客-CSDN博客
- iptable实现端口转发 - 博客园
- iptables 端口转发_zhouguoqionghai的博客-CSDN博客
- Linux 操作系统防火墙之iptables配置(centos系列)
Changelog
- 210913 米斯特乌建立初稿
- 本文作者:米斯特乌
- 文章标题:Linux 内部端口转发
- 本文链接:https://m.wuzhiping.top/p/1b57e99d.html
- 版权声明:博客内容采用 BY-NC-SA 4.0 许可协议,转载请注明出处!