端口转发工具 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
sudo apt-get install rinetd

2. 创建配置文件

创建配置文件 /etc/rinetd.conf(或其他路径),添加以下内容:

1
2
3
4
5
# 配置格式:绑定地址 绑定端口 转发地址 转发端口
0.0.0.0 8080 192.168.122.201 22

# 日志文件路径(可选)
logfile /var/log/rinetd.log

配置参数说明

参数 说明
绑定地址 监听连接的 IP 地址(0.0.0.0 表示所有网卡)
绑定端口 服务器上监听的端口号
转发地址 目标主机的 IP 地址
转发端口 目标主机上的端口号
allow/deny 访问控制(可选),指定允许或禁止的 IP

端口选择建议:某些网络环境可能会屏蔽特定端口,需要使用未被限制的端口。这里使用 8080 是因为它通常处于开放状态。

访问控制示例:为了提高安全性,可以只允许特定 IP 访问。在配置中添加 allow 参数:

1
0.0.0.0 8080 192.168.122.201 22 allow 10.252.22.222

3. 启动服务

启动 rinetd 服务:

1
sudo rinetd -c /path/to/your/rinetd.conf

4. 测试连接

在服务器上进行本地测试:

1
ssh -p 8080 user@localhost

如果成功连接到虚拟机,说明端口转发配置正确。接下来在笔记本上进行测试,下面的10.4.113.176是服务器的IP地址:

1
ssh -p 8080 user@10.4.113.176

如果同样成功连接到虚拟机,说明端口转发已经生效

5.可能遇到的问题

  • 防火墙设置:确保服务器的防火墙允许绑定端口(如8080)的入站连接
  • 端口权限问题:建议绑定大于1024的端口,以避免权限问题
  • 日志检查:如果连接失败,可以查看 rinetd 的日志文件(如 /var/log/rinetd.log)以获取错误信息

端口转发工具 Rinetd
http://ciliphen.github.io/端口转发工具Rinetd/
作者
Felix
发布于
2026年4月2日
更新于
2026年4月2日
许可协议