端口转发工具 Rinetd
当要远程访问跑在服务器上的虚拟机时,由于虚拟机没有外网地址,此时需要借助服务器进行端口转发
背景介绍
为了做实验和隔离环境,我在服务器上搭建了一个虚拟机。由于笔记本(10.252.22.222)和服务器(10.4.113.176)位于同一局域网,而虚拟机(192.168.122.201)位于服务器的虚拟子网中,笔记本无法直接访问虚拟机。此时需要借助服务器作为中介进行端口转发。网络拓扑如下:
graph TB
subgraph subnet1["局域网子网 (10.x.x.x)"]
laptop["笔记本<br/>10.252.22.222"]
server["服务器<br/>10.4.113.176"]
end
subgraph subnet2["虚拟机子网 (192.168.122.x)"]
vm["虚拟机<br/>192.168.122.201"]
end
laptop -->|直接连接| server
server -->|虚拟网络| vm
laptop -.->|需要转发| vm
style subnet1 fill:#e1f5ff
style subnet2 fill:#f3e5f5
style laptop fill:#fff9c4
style server fill:#c8e6c9
style vm fill:#ffccbc
本文使用的端口转发工具为 rinetd,下面以 SSH 访问虚拟机为例进行说明。
安装与配置
1. 安装 rinetd
在服务器上安装 rinetd:
1 | |
2. 创建配置文件
创建配置文件 /etc/rinetd.conf(或其他路径),添加以下内容:
1 | |
配置参数说明
| 参数 | 说明 |
|---|---|
| 绑定地址 | 监听连接的 IP 地址(0.0.0.0 表示所有网卡) |
| 绑定端口 | 服务器上监听的端口号 |
| 转发地址 | 目标主机的 IP 地址 |
| 转发端口 | 目标主机上的端口号 |
| allow/deny | 访问控制(可选),指定允许或禁止的 IP |
端口选择建议:某些网络环境可能会屏蔽特定端口,需要使用未被限制的端口。这里使用 8080 是因为它通常处于开放状态。
访问控制示例:为了提高安全性,可以只允许特定 IP 访问。在配置中添加 allow 参数:
1 | |
3. 启动服务
启动 rinetd 服务:
1 | |
4. 测试连接
在服务器上进行本地测试:
1 | |
如果成功连接到虚拟机,说明端口转发配置正确。接下来在笔记本上进行测试,下面的10.4.113.176是服务器的IP地址:
1 | |
如果同样成功连接到虚拟机,说明端口转发已经生效
5.可能遇到的问题
- 防火墙设置:确保服务器的防火墙允许绑定端口(如8080)的入站连接
- 端口权限问题:建议绑定大于1024的端口,以避免权限问题
- 日志检查:如果连接失败,可以查看 rinetd 的日志文件(如
/var/log/rinetd.log)以获取错误信息
端口转发工具 Rinetd
http://ciliphen.github.io/端口转发工具Rinetd/