frp实现简单的内网穿透,远程桌面

frp实现简单的内网穿透,远程桌面

Posted by Gavin on September 7, 2023

准备

  • 云服务器一台(或者有公网ip的机器);
  • 内网服务器一台或者自己的windows电脑也可以;
  • 域名一个(可选);

    在云服务器上搭建服务

    下载服务端软件

    注意要根据自己的服务器的架构来选择,不要选错版本了 github地址:github.com/fatedier/frp 下载相应的 Release 版本

查看linux服务器体系结构方法 可以通过下面的命令查看自己的服务器的系统的架构

uname -a

如果下载的文件被windows报毒的话可以在windows security里面排除你要放置的下载的文件的目录,然后再下载就可以了

安装服务 frps

1、解压 tar -xvf \*\*\*\*.tar.gz

2、配置 vi frps.ini

只有公网ip的配置文件

[common]
# 与client通讯的端口
bind_port = 7000
vhost_http_port = 8111
# 验证的token
token = xxxx

# dashboard的端口
dashboard_port = 6600
# 用户名
dashboard_port = admin
# 密码
dashboard_pwd = xxxx
# 日志文件路径
log_file = ./frps.log
# 日志级别
log_level = info

有域名的配置文件

[common]
# 与client通讯的端口
bind_port = 7000
vhost_http_port = 8111
# 验证的token
token = xxxx

# dashboard的端口
dashboard_port = 6600
# 用户名
dashboard_port = admin
# 密码
dashboard_pwd = xxxx
# 日志文件路径
log_file = ./frps.log
# 日志级别
log_level = info

# 服务端的subdomain_host需要和客户端配置文件中的subdomain、local_port配合使用, 
# 可通过{subdomain}.{subdomain_host} 的域名格式来访问自己本地的 web 服务。  
# 假如服务端的subdomain_host为dev.msh.com,客户端某个配置组中的  
# subdomain为a,local_port为8585,  
# 则:  
# 访问 a.dev.msh.com ,等同于访问本地的localhost:8585  
subdomain_host = 你自己的域名

frp后台运行和停止

要先cd到对应的frp的目录下面然后再执行对应的命令才可以

# 普通启动
./frps -c frps.toml
#后台运行
nohup ./frps -c frps.ini >/dev/null 2>&1 &  
#查找服务
ps -aux|grep frp| grep -v grep
ps -ef | grep frps
[1]12345
#kill进程
kill -9 12345

记得在腾讯云里面放开端口以及还需要去1panel里面放行对应的端口

自启动脚本

创建服务脚本(不起作用)

ubuntu

sudo vim /lib/systemd/frpp.service
#----------------------

[Unit]
Description=frps Service

[Service]
WorkingDirectory=/opt/frp_0.52.3_linux_amd64/
ExecStart=/opt/frp_0.52.3_linux_amd64/start.sh
# 下面的这个ubuntu就是对应的用户名
User=ubuntu
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

配置文件好像从ini变成了toml了

这个脚本必须和frps的配置文件在同一个文件夹里面,不然的话使用脚本启动就不起作用

sudo vim /opt/frp_0.52.3_linux_amd64/start.sh
#---------------
#!/bin/bash
nohup /opt/frp_0.52.3_linux_amd64/frps -c frps.toml >/dev/null 2>&1 & 
chmod +x /opt/frp_0.52.3_linux_amd64/start.sh

启动脚本

cd /opt/opt/frp_0.52.3_linux_amd64/
. start.sh

花里胡哨的,还是直接命令启动最靠谱

配置客户端并运行

  • 1、下载相应的 Release版本需要和服务端的版本一致
  • 2、配置frpc.ini

    http服务的配置

    无域名的配置

    [common]
    # 云服务器ip
    server_addr = 你的云服务器的ip地址
    # frps服务端和frpc客户端通讯的端口
    server_port = 7000
    # 密码
    token = xxxx
    [web]
    type = http
    local_ip = 127.0.0.1
    # 本地需要暴露的服务的端口
    local_port = 18081
    # 云服务器的ip或者云服务器的域名
    custom_domains = 你的云服务器的ip地址
    

    有域名的配置

    ```sh [common] server_addr = 你的云服务器的ip地址 server_port = 7000 token = xxxx [web] type = http local_ip = 127.0.0.1 local_port = 18081 subdomain = a

[pandora] type = http local_ip = 192.168.100.2 local_port = 8899 subdomain = b # 配合服务端的subdomain_host 相当于b.你的域名 这个域名

**访问内网http服务**  
custom\_domains:vhost\_http\_port 如:服务器ip.45:8111就可以访问到对应的本地的localhost:18081的服务了
## 远程桌面的配置
注意事项: 7005不一定要在服务器端的配置文件里面定义,只需要防火墙里面放行这个端口即可
1panel里面放行了端口还不行,一定要到腾讯云的防火墙里面放行7005的端口
这样哪怕没有域名也可以实现通过IP+不同的端口 穿透不同的服务了
```sh
[common]
# 云服务器ip
server_addr = 你的云服务器的ip地址
# frps服务端和frpc客户端通讯的端口
server_port = 7000
# 密码
token = xxxx
[RDP]
type = tcp
local_ip = 127.0.0.1
# 本地需要暴露的服务的端口(这个是远程桌面服务的端口,不要修改)
local_port = 3389
remote_port = 7005
  • 3、 运行
    进入到对应的目录里面,记得安全中心里面排除frp软件的目录,不然会报错
    cd D:\ruanjianbao\frp_0.51.3_windows_amd64\
    # cmd里面这样设置
    frpc.exe -c frpc.ini
    # powershell里面这样设置
    .\frpc.exe -c .\frpc-tencent-remoteDesktop.ini 
    

注意:
1)服务器端和内网机器端下载的版本要相同,否则可能会影响内网穿透
2)根据服务器系统选择合适的脚本

frp + nginx 配置

nginx配置文件,这样就可以直接通过域名来访问了,不需要手动的输入端口了

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    gzip on;

	
	server {
        #listen 11443 ssl;
		listen 80;
        server_name *.domain.com domain.com;
		location / {
			# 8111端口即为frp监听的http端口
			proxy_pass http://127.0.0.1:8111; 
			proxy_set_header Host $host:80;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			
			proxy_set_header Upgrade $http_upgrade;
			proxy_set_header Connection "upgrade";
			
			proxy_connect_timeout 7d;
			proxy_send_timeout 7d;
			proxy_read_timeout 7d;
 
			}
		# 防止爬虫抓取
		if ($http_user_agent ~* "360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot|NSPlayer|bingbot")
			{
				return 403;
			}
	}
}

所有通过domain.com域名访问的请求都会被代理到127.0.0.1的8111端口,这个端口是被frp监听的,请求会被代理到客户端的对应的服务上面

openwrt中的配置

更换服务器的ip之后,记得要把openvpn里面的配置文件更新一下

把里面的这个地方的ip和端口更换掉

修改成如下所示