标签 - Linux 共找到结果 23 条

什么是 frp

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

前言:

在家里宽带有公网IP直接在路由器上进行端口映射还是很方便的,但是有时候需要在公司使用或者进行微信开发(微信小程序开发必须要求端口为443的https)这种方式就不好用了,所以会用到 frp 内网穿透工具

准备:

  1. 一台拥有外网ip的主机(我这里用的就是阿里云的服务器了)做服务端,在内网使用的主机(目前我自己的开发主力机)做客户端,域名还是要的
  2. frp releases 下载最新版本 frp 工具,请根据系统版本不同下载不同版本工具

开始配置

1. 服务器配置:

1.1 frps配置
#这里我服务器下载的是linux_amd64版本
 wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz

#解压文件
tar -zxvf frp_0.21.0_linux_amd64.tar.gz

#因为是服务端用,需要删除frpc开头的多余客户端文件
rm -f frpc
rm -f frpc.ini
rm -f frpc_full.ini

#修改frps配置
vim frps.ini

由于 frp工具的文档 还是很详细了,这里就只贴一下我自己的配置,不做过多的介绍

#frps.ini配置
[common]
bind_port = 8090
vhost_http_port = 3800

[common]部分是必须有的配置,其中bind_port是自己设定的frp服务端端口,vhost_http_port是自己设定的http访问端口。,因为会用到nginx做反向代理绑定域名,所以配置不是很多

1.2 linux服务器新建 frps.service 方便控制frps服务
vim /etc/systemd/system/frps.service

frps.service 内容

[Unit]
Description=frps
After=network.target

[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
ExecStart=/usr/local/sbin/frp/frps -c /usr/local/sbin/frp/frps.ini
ExecStop=/bin/kill $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

修改service文件权限使其生效并设置开机自启

chmod 644 /etc/systemd/system/frps.service
systemctl daemon-reload
# 设置frps开机自启
systemctl enable frps.service
1.3 nginx添加反向代理
server {
    server_name demo.frp.mrabit.com;
    listen 443 ssl http2;
    ssl on;
    ssl_certificate   cert/frp.mrabit.cer;
    ssl_certificate_key  cert/frp.mrabit.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
        # 上面frps配置的vhost_http_port端口
        proxy_pass http://localhost:3800;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        add_header X-Frame-Options SAMEORIGIN;
        proxy_set_header X-Forwarded-For 
        $proxy_add_x_forwarded_for;
    }
}

2. 客户端配置

#mac上面下载的是darwin_amd64版本
wget https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_darwin_amd64.tar.gz

#解压后当然也要删除frps开头的多余服务端文件
rm -f frps
rm -f frps.ini
rm -f frps_full.ini

#修改frpc配置
vim frpc.ini

这里贴一下客户端的配置,更多详情还是去看 frp工具的文档 可能会更清晰

[common]
server_addr = x.x.x.x
server_port = 8090

[demo]
type = http
local_port = 80
# custom_domains 值对应上方 nginx 配置的 server_name 值
custom_domains = demo.frp.mrabit.com

[common]中的server_addr填frp服务端的ip(也就是外网主机的IP),server_port填frp服务端的bind_prot

[demo]为当前模块的名字,可以自定义

[demo]中的type对应服务端配置,可在frp工具的文档查看更多选项。local_port填本地想要映射的服务的端口。custom_domains为要映射的域名,记得域名的A记录要解析到外网主机的IP。

至此,frp内网穿透工具的基本使用就足够了,现在就可以执行看效果了:

QQ20181128122149.png

扩展

由于可能开发端口会改变,虽然frpc.ini可以同时配置多个模块,但是总有不常用有时候却要用到的端口,每次遇到这种情况去改frpc.ini还是很麻烦的,为此,可以编写一个shell脚本,动态去修改frpc.ini的配置,具体操作步骤如下:

1. 新建配置模版文件 frpc.ini.bak

# 该文件放置在frpc同级目录下
[common]
server_addr = x.x.x.x
server_port = 8090

# web_name 对应上方frp.sh脚本内 web_name 做关键字替换
[web_name]
type = http
# web_port 对应上方frp.sh脚本内 web_port 做关键字替换
local_port = web_port
# web_domain 对应上方frp.sh脚本内 web_domain 做关键字替换
custom_domains = web_domain.frp.mrabit.com

2. 新建shell脚本 frp.sh

#!/bin/bash
num=$#
ok=0
if [ ${num} != 2 ]; then
    echo '请输入域名 端口号'
    exit 0
fi
# frpc文件放置路径
# $1 参数为绑定的域名
# $2 参数为绑定的本地端口
frpPath='/etc/frp'
cp $frpPath/frpc.ini.bak $frpPath/frpc.ini
# 替换关键字 web_domain 为 $1 变量
sed -i '' 's/web_domain/'$1'/g' $frpPath/frpc.ini
# 替换关键字 web_name 为 $1 变量
sed -i '' 's/web_name/'$1'/g' $frpPath/frpc.ini
# 替换关键字 web_port 为 $2 变量
sed -i '' 's/web_port/'$2'/g' $frpPath/frpc.ini
$frpPath/frpc -c $frpPath/frpc.ini

3. 设置泛域名解析*.frp到自己的服务器:

QQ20181128123331.png

4. 修改服务端配置内 nginx 配置:

server {
   server_name *.frp.mrabit.com;
   ...
}

5. 分别执行 ./frp.sh demo 80./frp.sh test 7777效果如下:

QQ20181128123836.png

都连接成功了,分别访问https://demo.frp.mrabit.comhttps://test.frp.mrabit.com可查看到均可访问到本地服务内容

至此,shell脚本也执行成功,现在就算没有公网IP进行映射也可以开开心心的调试代码了

参考地址:

阅读全文

ssh连接服务器后,输入locale查看配置会报错.

Cannot set LC_CTYPE to default locale: No such file or directory 或者 Cannot set LC_ALL to default locale: No such file or directory

1.png

我的解决方法如下:

1.启动 Armbian 配置菜单

sudo armbian-config

分别选择personalLocales 进入语言选择界面:

2.png

空格勾选 en_US.UTF-8 UTF-8zh_CN.GBK GBKzh_CN.UTF-8 UTF-8,并 tab 键选择OK,进入下一界面选择默认语言,我这里还是选择的en_US.UTF-8 UTF-8,继续 tab -> OK -> 回车.

等配置执行完毕,就可以 tab 键选择 Cancel 回到shell命令界面了.

2.下载中文字库

sudo apt-get install fonts-wqy-zenhei

等待安装完成,再次执行locale看看应该就不会有报错警告了.

阅读全文

准备拿1T的硬盘在树莓派做Time Capsule.

1.格式化移动硬盘

使用命令查看自己的移动硬盘:

sudo fdisk -l 

我的是/dev/sdb 由于树莓派想要识别NTFS和FAT32需要单独安装驱动,然后cpu飙升,所以就直接格式化成ext4格式了.

sudo mkfs.ext4 /dev/sdb

期间会问你各种问题,直接回车搞定.

1.png

使用sudo fdisk -l就可以看到移动硬盘已经被格式化完成了.

2.png

2.硬盘分区

回头想一想1T的硬盘做备份还是太奢侈了,分300G应该够了,剩下的继续做下载机.继续使用fdisk命令执行分区操作.

sudo fdisk /dev/sdb

3.png

输入n新建一个分区,输入p建立分区,输入分区编号1 First sector 默认 2048, Last sector 我预计是300G,所以就输入了 629145600(2048 * 1024 * 300:别问我为什么公式是这样的,我也是试出来的,hah); 再来一遍新建分区,这次编号是2,First sector 和 Last sector 就可以默认了,当然,如果想多几个分区就自己去算吧.

最后,记得w保存分区表.

4.png

接下来可以sudo fdisk -l看看分区后的效果:

5.png

最后的最后,记得分区后要格式化分区才可以使用,不然会出错的:

6.png

sudo mkfs.ext4 /dev/sdb1
sudo mkfs.ext4 /dev/sdb2

参考地址:

阅读全文

树莓派使用默认官方源速度很慢,而且可能安装软件会报错,于是决定更换成国内镜像源

1.编辑配置文件

编辑/etc/apt/sources.list文件,命令如下:

sudo vi /etc/apt/sources.list

注释掉默认配置,新增:

deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib rpi
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main non-free contrib rpi

2.更新软件索引清单

sudo apt-get update

大功告成~

参考地址:

阅读全文

一直使用套路云的服务器,https证书也是套路云一键生成,后来在GitHub上看见 acme.sh 的申请脚本,有效期只有三个月,但是可以通过定时任务自动执行申请命令,所以就准备来试试水.

1.安装脚本

安装很简单, 一个命令:

curl  https://get.acme.sh | sh

2.申请证书

申请证书需要先进行域名归属权校验,为了之后的定时任务方便,这里选项 DNS 方式: 这里举例为 ALIDNS 的 API 调用,更多方式请查看 如何使用 DNS API

2.1 创建 AccessKey

阿里云文档查看如何创建AccessKey

2.2 保存 AccessKeyId 和 AccessKeySecret

创建AccessKey后会得到 AccessKeyId 和 AccessKeySecret,我们需要保存在 ~/.acme.sh/account.conf 保存自己的 AccessKeyId 和 AccessKeySecret

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

2.3 正式申请证书

接下来执行(需要把mrabit.com替换成需要申请的域名):

acme.sh --issue --dns dns_ali -d mrabit.com -d *.mrabit.com

申请成功后就可以在~/.acme.sh/mrabit.com/查看生成的证书文件了

QQ20180615221724.png

3.copy/安装 证书

申请成功后当然就是使用证书:

acme.sh  --installcert  -d  mrabit.com   \
        --key-file   /etc/nginx/cert/mrabit.key \
        --fullchain-file /etc/nginx/cert/fullchain.cer \
        --reloadcmd "systemctl restart nginx"

该命令中的参数将自动保存在~/.acme.sh/mrabit.com目录下的mrabit.com.conf文件里,定时器更新证书的时候实现自动部署。

4.设置nginx

2.png

重启nginx就可以体验你的新证书了.

3.png

当然,当前证书只有90天的有效期,不过不用担心,acme.sh已经设定crontab定时任务,当证书过期会自动申请.

相关链接:

阅读全文