本文针对以下 2 点需求分别阐述 cow,frp 和 rinetd 三种方案的使用方法并介绍这三种方案的不同之处和各自适合的场景。
- 家中 PC-X 和单位 PC-Y 通过代理服务器实现网络穿透互联(frp)
- 现有 3 台机器,A 为具有公网 IP 的服务器,B 与 A 属于同一内网但没有外网 IP 的服务器,现在想要借助 A 做代理,使家中 PC-X 电脑可以访问 B 服务器(frp,rinetd)
- 科学上网代理转发(frp,cow,rinetd)
这里假定机器的 IP:
- A:11.22.33.44
- B:55.66.77.88
cow
cow 是一个非常 NB 的二级代理工具
安装 cow
1 |
|
编辑配置文件 ~/.cow/rc
cow 本地 PC-X 配置
1 |
|
cow 在主机 A 上的配置
1 |
|
说明
- ‘YYY’ 是 cow 密码
-
‘ZZZ’ 是 C 上的 $$ 服务的密码
- ‘x.x.x.x’ 是有 $$ 代理服务的主机 C 的 IP
frp
高性能反向代理应用,支持 TCP, UDP 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。具体功能和配置方法参考官方文档。
这里只是介绍如何使用端口映射实现内网穿透功能。
通过 ssh 访问内网机器
-
将 frps 及 frps.ini 放到具有公网 IP 的 A 机器上。
-
将 frpc 及 frpc.ini 放到处于内网环境的 B 机器上。
-
A 服务器上修改 frps.ini 文件,这里使用了最简化的配置:
1 |
|
- A 服务器上启动 frps:
1 |
|
- B 服务器上修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 11.22.33.44;
1 |
|
- B 服务器上启动 frpc:
1 |
|
- 本地 PC-X 机器通过 ssh 访问内网机器,假设用户名为 root:
1 |
|
Rinetd
安装 Rinetd
CentOS
官方源不具有 Rinetd,所以需要安装第三方源。
配置第三方源
1 |
|
安装
1 |
|
Ubuntu
1 |
|
编译安装
1 |
|
配置 Rinetd
配置文件路径是 /etc/rinetd.conf
配置格式
1 |
|
- Source Address:源地址,绑定的本地地址
- Source Port:源端口,绑定的本地端口
- Destination Address: 目的地址,连接的地址
- Destination Port:目的端口,连接的端口
在每一单独的行中指定每个要转发的端口。源地址和目的地址都可以是主机名或IP地址,IP 地址0.0.0.0将rinetd绑定到任何可用的本地IP地址上。例如:0.0.0.0 8080 www.baidu.com 80
配置规则
1 |
|
说明
0.0.0.0 表示本机绑定所有可用地址 将所有发往本机 8080 端口的请求转发到 47.88.99.33 的 8080 端口 将所有发往本机 2222 端口的请求转发到 192.168.1.13 的 3389 端口 将所有发往 1.2.3.4 的 80 端口请求转发到 192.168.0.11 的 80 端口 allow 设置允许访问的 IP 地址信息,
*.*.*.*
表示所有 IP 地址 logfile 设置打印的 log 的位置
运行 Rinetd
启动
脚本启动
1 |
|
手动启动
1 |
|
关闭
脚本关闭
1 |
|
手动关闭
1 |
|
Rinetd 使用注意事项
- rinetd.conf 中绑定的本机端口必须没有被其它程序占用
- 运行 rinetd 的系统防火墙应该打开绑定的本机端口
- 不支持 FTP 的跳转
- 编译安装不自带脚本