当前位置:首页 > CN2资讯 > 正文内容

docker下frpc自起 docker部署frp

2天前CN2资讯

前言

前不久我出过一期《Docker系列 通过FRP实现内网穿透》讲述怎么利用FRP进行内网穿透。不过,经过测试,很快我发现此文有相当大的局限性,列举如下:

  • 仅限x86架构的机器/VPS可以使用
  • 不是官方维护的镜像,很难获得开发者的支持

但是,frp开发者对于Docker镜像的态度比较随意,这对于使用Docker的用户来不太友好。其实fatedier/frps的Docker镜像估计也是可以用的,不过我不准备折腾了。因为我感觉作者的主要精力还是放在原生frp程序里。所以我们干脆就用最官方的方法来使用frp!我看了一下Github的README文档,也不是很难。下面我们用新的方法再安装一次frp吧!

这个教程可以支持frp所支持的所有架构/系统类型,可以放心食用。如果你是高级用户,可以直接在Github Repo了解如何进行更加细致的设置。

原理

FRP的基本原理大致如下:

  • 在一个有公网ip的VPS中搭建frp server(frps)服务。将域名test.sample.com解析到VPS里。
  • 给frps开放某些特定的端口,比如1234
  • 在本地电脑安装frp customer(frpc)服务。通过common系列参数保证frps-frpc的通信正常。
  • 本地某服务上线,比如localapp:6534。
  • frpc进行内部连接,比如frpc:1234
  • 穿透路线:test.sample.com→VPS→frps:1234→frpc:1234→localapp:6534

按下面的步骤走,你就能深切地体会到原理对应的具体的命令行操作。

准备工作

如果想要降低失败率,你需要较好地掌握Linux基础,特别是与用户(组)相关的知识。如果你不太会Linux,你可以试一下本教程,有问题可加Telegram群或评论区提问。

域名解析

你需要提前将待用域名解析到VPS(frps端)的公网ip中。在本章的示范中,需要用到以下域名:

  • frps.sample.com:用于访问服务器端的frps。
  • httptest.sample.com:用于验证http内网穿透是否生效

如果你还需要https,还需要:

  • httpstest.sample.com:用于验证https内网穿透的是否生效

提前申请并下载好httpstest.sample.com的SSL证书,即下文的httpstest.sample.com.pem、httpstest.sample.com.key。

frp版本

frp不同版本所使用的软件是不同的。在frp的Github Repo中,你可以看到最新的版本:

点进去后,你要根据自己的VPS/本地设备的架构/系统来下载软件:

如果你不知道自己的机子是什么架构,可以用uname -a来查看。有问题加群或评论区提问。

服务端

配置ini文件

首先,创建工作目录:

work=~/Downloads/frp

创建并进入目录:

mkdir -p $work && cd $work

下载软件(不同CPU架构要选不同的版本)。或者你也可以在电脑下载,然后通过sftp上传到工作目录。

wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_386.tar.gz

解压tar.gz文件:

tar zvfx frp_0.43.0_linux_386.tar.gz && mv frp_0.43.0_linux_386/* . && rm -r frp_0.43.0_linux_386/

此时文件夹的内容类似于:

$ ls -hl -rw-rw-r-- 1 test_user test 8.8M May 27 16:35 frp_0.43.0_linux_386.tar.gz -rwxr-xr-x 1 test_user test 9.8M May 27 16:31 frpc -rw-r--r-- 1 test_user test 11K May 27 16:35 frpc_full.ini -rw-r--r-- 1 test_user test 126 May 27 16:35 frpc.ini -rwxr-xr-x 1 test_user test 13M May 27 16:31 frps -rw-r--r-- 1 test_user test 5.5K May 27 16:35 frps_full.ini -rw-r--r-- 1 test_user test 26 May 27 16:35 frps.ini -rw-r--r-- 1 test_user test 12K May 27 16:35 LICENSE

修改frps.ini的内容。主要是对端口号、帐号和密码、token进行一定改动。大家注意中文注释对应的参数。

vim ./frps.ini

填入以下内容。如果你是高级用户,你可以根据frps_full.ini自己进行调整。小白用户不妨直接基于我写好的配置进行改动(注意中文标注的相应参数,推荐自定义,不要用我的默认值)。

[common] # A literal address or host name for IPv6 must be enclosed # in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80" # For single "bind_addr" field, no need square brackets, like "bind_addr = ::". bind_addr = 0.0.0.0 # 按需修改。默认bind_port = 7000 bind_port = 6500 # udp port to help make udp hole to penetrate nat # 按需修改。默认bind_udp_port = 7001 bind_udp_port = 6502 # udp port used for kcp protocol, it can be same with 'bind_port' # if not set, kcp is disabled in frps # 按需修改。默认bind_port = 7000 kcp_bind_port = 6500 # specify which address proxy will listen for, default value is same with bind_addr # proxy_bind_addr = 127.0.0.1 # if you want to support virtual host, you must set the http port for listening (optional) # Note: http port and https port can be same with bind_port # 按需修改。默认vhost_http_port = 80, vhost_https_port = 443。但一般VPS的80和443端口都要给Nginx之类的应用来托管。如果你的VPS专门只是用来反代的话,可以使用默认的80和443端口。 vhost_http_port = 6503 vhost_https_port = 6504 # response header timeout(seconds) for vhost http server, default is 60s # vhost_http_timeout = 60 # tcpmux_httpconnect_port specifies the port that the server listens for TCP # HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP # requests on one single port. If it's not - it will listen on this value for # HTTP CONNECT requests. By default, this value is 0. # tcpmux_httpconnect_port = 1337 # If tcpmux_passthrough is true, frps won't do any update on traffic. # tcpmux_passthrough = false # set dashboard_addr and dashboard_port to view dashboard of frps # dashboard_addr's default value is same with bind_addr # dashboard is available only if dashboard_port is set dashboard_addr = 0.0.0.0 dashboard_port = 6501 # dashboard user and passwd for basic auth protect # frps后台的用户名和密码 dashboard_user = superman dashboard_pwd = test0test # enable_prometheus will export prometheus metrics on {dashboard_addr}:{dashboard_port} in /metrics api. enable_prometheus = true # dashboard assets directory(only for debug mode) # assets_dir = ./static # console or real logFile path like ./frps.log # log_file = ./frps.log # trace, debug, info, warn, error log_level = info log_max_days = 3 # disable log colors when log_file is console, default is false disable_log_color = false # DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true. detailed_errors_to_client = true # authentication_method specifies what authentication method to use authenticate frpc with frps. # If "token" is specified - token will be read into login message. # If "oidc" is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is "token". authentication_method = token # authenticate_heartbeats specifies whether to include authentication token in heartbeats sent to frps. By default, this value is false. authenticate_heartbeats = false # AuthenticateNewWorkConns specifies whether to include authentication token in new work connections sent to frps. By default, this value is false. authenticate_new_work_conns = false # auth token token = D3YhBv*sD3#*3LrvQX!%tA&r9xHN9N # oidc_issuer specifies the issuer to verify OIDC tokens with. # By default, this value is "". oidc_issuer = # oidc_audience specifies the audience OIDC tokens should contain when validated. # By default, this value is "". oidc_audience = # oidc_skip_expiry_check specifies whether to skip checking if the OIDC token is expired. # By default, this value is false. oidc_skip_expiry_check = false # oidc_skip_issuer_check specifies whether to skip checking if the OIDC token's issuer claim matches the issuer specified in OidcIssuer. # By default, this value is false. oidc_skip_issuer_check = false # heartbeat configure, it's not recommended to modify the default value # the default value of heartbeat_timeout is 90. Set negative value to disable it. # heartbeat_timeout = 90 # user_conn_timeout configure, it's not recommended to modify the default value # the default value of user_conn_timeout is 10 # user_conn_timeout = 10 # only allow frpc to bind ports you list, if you set nothing, there won't be any limit allow_ports = 3505-3510 # pool_count in each proxy will change to max_pool_count if they exceed the maximum value max_pool_count = 5 # max ports can be used for each client, default value is 0 means no limit max_ports_per_client = 0 # tls_only specifies whether to only accept TLS-encrypted connections. By default, the value is false. tls_only = false # tls_cert_file = server.crt # tls_key_file = server.key # tls_trusted_ca_file = ca.crt # if subdomain_host is not empty, you can set subdomain when type is http or https in frpc's configure file # when subdomain is test, the host used by routing is test.frps.com # 改成 subdomain_host = frps.sample.com # if tcp stream multiplexing is used, default is true # tcp_mux = true # specify keep alive interval for tcp mux. # only valid if tcp_mux is true. # tcp_mux_keepalive_interval = 60 # tcp_keepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps. # If negative, keep-alive probes are disabled. # tcp_keepalive = 7200 # custom 404 page for HTTP requests # custom_404_page = /path/to/404.html # specify udp packet size, unit is byte. If not set, the default value is 1500. # This parameter should be same between client and server. # It affects the udp and sudp proxy. udp_packet_size = 1500

如果你用了宝塔、ufw等软件,请打开防火墙的相应端口:6500-6504、3505-3510。

创建服务

为了可以比较方便地对这个软件进行管理,我们通过构建Linux Service的方式管理frp。我们创建frps服务:

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

填入以下内容:

[Unit] Description=frps service Wants=network-online.target After=network.target [Service] Type=simple ExecStart=/home/test_user/Downloads/frp/frps -c /home/test_user/Downloads/frp/frps.ini # ExecStop= Restart=on-failure # always KillMode=process TimeoutSec=120 RestartSec=60 [Install] WantedBy=multi-user.target

注意:

  • ExecStart如果有引用文件,应该使用绝对路径
  • ExecStart中的/home/test_user字段代表的是用户home目录。如果你有一个非root用户test_user,一般地你可以使用本例中的/home/test_user。如果你是root用户,要将/home/test_user替换成/root。

管理服务

启动服务:

sudo systemctl start frps.service

查看状态:

systemctl status frps.service

如果成功,有类似下面的日志(有success字样):

最后,不要忘了设置开机自动启动

sudo systemctl enable frps.service

其它常用的命令还包括:

  • 重启服务:
sudo systemctl restart frps.service
  • 停止服务:
sudo systemctl stop frps.service

当然,你也可以访问frps的dashboard:http://frps.sample.com:6501。帐户/密码是:superman/test0test。

本地端

本地端的创建很多原则和服务端是一致的,比如用户目录的设置。大家注意按需修改

如果你用了宝塔、ufw等软件,请打开防火墙的相应端口:3505-3510。

配置ini文件

设置工作目录:

work=~/Downloads/frpc

创建并进入目录:

mkdir -p $work && cd $work

下载软件:

wget https://github.com/fatedier/frp/releases/download/v0.43.0/frp_0.43.0_linux_386.tar.gz

解压文件:

tar zvfx frp_0.43.0_linux_386.tar.gz && mv frp_0.43.0_linux_386/* . && rm -r frp_0.43.0_linux_386/

此时文件夹的内容类似于:

$ ls -hl -rw-rw-r-- 1 test_user test 8.8M May 27 16:35 frp_0.43.0_linux_386.tar.gz -rwxr-xr-x 1 test_user test 9.8M May 27 16:31 frpc -rw-r--r-- 1 test_user test 11K May 27 16:35 frpc_full.ini -rw-r--r-- 1 test_user test 126 May 27 16:35 frpc.ini -rwxr-xr-x 1 test_user test 13M May 27 16:31 frps -rw-r--r-- 1 test_user test 5.5K May 27 16:35 frps_full.ini -rw-r--r-- 1 test_user test 26 May 27 16:35 frps.ini -rw-r--r-- 1 test_user test 12K May 27 16:35 LICENSE

修改frpc.ini内容如下:

[common] # 填写服务器实际IP server_addr = frps.sample.com # 填写服务器frps的主端口号,本示范中是6500 server_port = 6500 # 与frps.ini中的token要一一对应 token = 12345678 # 日志 log_level = info log_max_days = 3 # 日志 log_file = /home/test_user/Downloads/frpc/frpc.log log_level = info log_max_days = 3 [ssh-3505] # 将服务端的3505端口连接到本地的22端口进行ssh连接 type = tcp # 本地ip local_ip = 127.0.0.1 # 你的ssh端口。默认是22。如果有自定义ssh端口,就写那个自定义端口。 local_port = 22 # frps开放的端口之一。我随便写了个3505。 remote_port = 3505 [http-httptest.sample.com] # 测试http type = http # 本地ip local_ip = 127.0.0.1 # 比如,某个Docker应用的端口号6533 local_port = 6533 custom_domains = httptest.sample.com # 如果你要https,还要加类似下面这种片段。 [https-httpstest.sample.com] # 测试https type = https # 填写域名 custom_domains = httpstest.sample.com plugin = https2http plugin_local_addr = 127.0.0.1:6533 # HTTPS 证书相关的配置。路径用绝对路径。 plugin_crt_path = /home/test_user/Downloads/frpc/httpstest.sample.com.pem plugin_key_path = /home/test_user/Downloads/frpc/httpstest.sample.com.key plugin_host_header_rewrite = 127.0.0.1 plugin_header_X-From-Where = frp

创建服务

接着创建服务:

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

填入以下内容:

[Unit] Description=frpc service Wants=network-online.target After=network.target [Service] Type=simple ExecStart=/home/test_user/Downloads/frpc/frpc -c /home/test_user/Downloads/frpc/frpc.ini # ExecStop= Restart=on-failure # always KillMode=process TimeoutSec=120 RestartSec=60 [Install] WantedBy=multi-user.target

管理服务

启动服务:

sudo systemctl start frpc.service

查看状态:

systemctl status frpc.service

如果成功,有类似下面的日志(有success字样):

最后,不要忘了设置开机自动启动

sudo systemctl enable frpc.service

其它常用的命令还包括:

  • 重启服务:
sudo systemctl restart frpc.service
  • 停止服务:
sudo systemctl stop frpc.service

测试

这部份和之前的教程是一样的,没有区别。

SSH

你在自己的Shell终端里测试一下即可:

  • 地址:frps.sample.com
  • 端口号:3505
  • 帐户:<自己的帐户>
  • 密码:<自己的密码>

HTTP

访问http://httptest.sample.com:6503可成功访问应用。

HTTPS

访问https://httpstest.sample.com:6504可成功访问应用。

小结

这个教程还是蛮顺的,使用时注意一下用户名/用户组的设置就行了。另外,我觉得端口、用户名/密码、Token这些信息大家最好不要用默认的,自己改动一下,测试一下,以加深对frp的理解。FRP的内网穿透服务还是很稳定的,希望大伙们使用愉快喽!

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/19964.html

    分享给朋友:

    “docker下frpc自起 docker部署frp” 的相关文章

    CN2 GIA VPS推荐:最佳虚拟专用服务器选择

    CN2 GIA VPS概述 在当今数字时代,寻找一个稳定且高效的虚拟专用服务器(VPS)成为很多企业和个人用户的需求。而CN2 GIA VPS凭借其卓越的性能和稳定的连接,受到了越来越多的关注。简单来说,CN2 GIA是一种中国电信提供的高质量网络传输线路,可以确保数据的快速和安全传输。 我曾尝试过...

    选择Lisahost VPS服务,提升您海外电商、游戏和流媒体体验

    Lisahost 是一家于 2020 年 1 月成立的 VPS(虚拟专用服务器)提供商,专注于为全球用户提供高质量的云服务。我发现它的目标市场覆盖了包括香港、台湾、韩国、日本、新加坡、美国和英国等多个地区。作为一家新兴企业,lisahost 用创新的服务模式和多样化的产品,为需要高效网络及流畅访问的...

    深入了解DMIT不同线路,优化您的网络体验

    在开始深入了解DMIT这一知名VPS提供商之前,我想先分享一下我对于它的初步印象。DMIT的使命是为用户提供高性能、稳定的VPS解决方案,特别是在跨境访问方面表现不俗。他们采用的CN2优化线路更是让其在众多竞争对手中脱颖而出。通过不断的发展与创新,DMIT为不同需求的用户提供了多种线路选择。 DMI...

    使用宝塔面板配置与优化IPv6技术的全面指南

    宝塔面板简介 宝塔面板是一款非常实用的服务器管理工具,它的功能覆盖了许多方面。从LAMP、LNMP环境的快速搭建到监控、FTP、数据库及JAVA的管理,宝塔面板都能提供一键式的解决方案。通过这样一款工具,服务器的管理不再复杂,用户只需通过友好的Web界面进行操作,即可轻松实现各种任务。 我常常使用宝...

    国外VPS:高性价比虚拟专用服务器选择指南

    什么是国外VPS? 当我提到国外VPS时,它指的就是虚拟专用服务器(Virtual Private Server),这是一种把物理服务器分割成多个独立的小型服务器的技术。每一个VPS都拥有自己的公网IP地址和操作系统,资源如磁盘空间、内存和CPU都可以独立配置。这种固有的隔离性,可以让我在同一个物理...

    AT&T VPS详解:稳定性与灵活性的完美选择

    在这篇文章中,我想和大家聊聊AT&T VPS,尤其是在更广泛的虚拟私有服务器市场中,AT&T VPS代表了什么。AT&T是一家美国知名的电信运营商,其提供的VPS服务在一定程度上依赖于它的网络基础设施。这种结合了高质量网络与虚拟服务器技术的服务,吸引了大量需要高稳定性和可扩展...