6

使用一条FRP隧道访问多个内网服务

 2 years ago
source link: https://blog.starryloki.com/2021/02/22/%E4%BD%BF%E7%94%A8%E4%B8%80%E6%9D%A1frp%E9%9A%A7%E9%81%93%E8%AE%BF%E9%97%AE%E5%A4%9A%E4%B8%AA%E5%86%85%E7%BD%91%E6%9C%8D%E5%8A%A1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Loki's Blog

使用一条FRP隧道访问多个内网服务

Created2021-02-22|Updated2021-06-02|Notes
Word count:1.1k|Reading time:3min|Post View:16

虽然IPv6正在逐渐普及,可能会有助于用户获得公网IP,但是运营某学校校园网的电信并未打算为该校师生提供IPv6,公网IP更加无从说起,所以目前来说,FRP仍然是生活中非常常用且不可取代的。然而一些FRP服务商的免费服务中提供的隧道十分少,稳定的花生壳只提供了两条隧道,而SakuraFrp虽然提供了5条但是没有前者那么稳定,虽然2-5条隧道也不是不能用,但是对于RDP,SSH,web等一众服务来说是不够的,那么有没有办法仅用一条隧道就访问内网的多个服务呢?

答案是肯定的:我们可以在隧道搭建SOCKS5来实现。

SOCKS5是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,说白了就是当通过FRP连接到SOCKS5服务端后,客户端就相当于直接进入服务端所在的内网了。

部署服务端

系统:Ubuntu Server 20.04.2 LTS

安装Shadowsocks服务端

在Ubuntu下可以通过Nodejs快速部署Shadowsocks服务端,首先安装Nodejs和npm:

sudo apt update
sudo apt install nodejs npm

安装pm2:

npm -g i pm2

安装shadowsocks:

npm -g i shadowsocks

此时应该会提示安装路径,如/usr/local/lib/node_modules/shadowsocks/config.json

用Vim打开这个配置文件,如果这个文件是空的就写入如下信息:

{
    "server":"0.0.0.0",
    "server_port":8083,
    "local_address":"127.0.0.1",
    "local_port":1080,
    "password":"myPassword",
    "timeout":600,
    "method":"aes-256-cfb"
}

易知访问端口为8083,密码为myPassword,算法为aes-256-cfb此时应该设置一个能抵御社工的强密码,否则黑客将能轻易地通过简单密码进入内网!

部署完成后,可以启动服务:

pm2 start /usr/local/lib/node_modules/shadowsocks/bin/ssserver

但是这样部署并不能开机自启,我们可以通过systemd来实现:

首先新建一个服务并编辑:

sudo vim /etc/systemd/system/ss.service

输入以下内容

[Unit]
Description=Shadowsocks Client Service 
After=network.target 

[Service]
User=Username
Type=forking
ExecStart=pm2 start /usr/local/lib/node_modules/shadowsocks/bin/ssserver

[Install]
WantedBy=multi-user.target

其中Username为用户名

保存之后启用服务并启动:

sudo systemctl enable ss.service
sudo systemctl start ss.service

重启并测试

pm2 ls

如果出现shadowsocks的服务则部署成功

部署FRP服务

部署的客户端及教程在各大服务商都有提供,安装好FRP服务后将本地端口指向上文配置文件中所配置的访问端口即可。值得一提的是,因为某些原因花生壳的SOCKS5隧道仅对付费用户开放,而我们使用内网穿透的场景多为TCP协议为主,所以我们可以新建一条TCP或UDP隧道(取决于实际需求)来指向shadowsocks的端口,SakuraFrp也类似,新建TCP/UDP隧道即可。

客户端环境

操作系统:iOS/iPad OS 14.5,macOS Big Sur 11.2.1

客户端部署

iOS在非国区商店都能下载Shadowrocket,支持直接在armMac上运行,Windows和安卓可以在各大使用ss协议的机场下载客户端,在客户端中填入FRP的公网地址和端口,密码和算法按照配置文件来填写,启动代理即连接内网。后续可以使用PAC进行进一步操作,这里不再阐述。

设置HOSTS

在上述步骤完成后,虽然理论上已经进入内网,但是仍然无法通过原局域网IP连接对应主机,这时候我们需要在服务端设置hosts:在hosts中输入内网IP 自定义域名(最好选择有代表性且不与广域网的域名重复)
如:

192.168.1.1 a.com

这时候我们在外网使用ss连接,通过a.com即可访问内网中192.168.1.1的主机。通过ping可以发现在SOCKS5的隧道中,各个内网主机的IP被分配了E类IP地址:240.0.0.0-255.255.255.254,而每次连接时各个主机的IP都不一样,目前也没有搞懂这个IP的分配机制,所以就先用hosts来指定IP。

在隧道中ping内网主机绑定的域名


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK