由于中国现在的网络环境问题,以及目前全球ipv4资源紧缺,大部分家用宽带没有一个完全属于自己的公网ip。就算有,也只有被运营商封禁部分端口的动态公网ip,并不满足搭建服务器的条件。所以,本文旨在通过使用内网穿透技术来实现在家中搭建服务器的想法。
零、使用前准备
您可能需要一台拥有静态公网ip的服务器。
如果您没有的话,您可能需要找一家内网穿透服务商。
目前国内提供内网穿透的服务商有这样几家:
- 贝锐|花生壳 贝锐官网|花生壳官网|DNS内网穿透|域名注册|向日葵远程控制|远程桌面|蒲公英路由器-贝锐官网 (oray.com)
- 神卓互联 神卓互联-内网穿透|DDNS|端口映射工具 (shenzhuohl.com)
- SakuraFrp Sakura Frp — 免费内网穿透_免费端口映射_高速_高防节点_不限流量_Minecraft我的世界_微信开发调试_群辉NAS_无需公网_免备案 (natfrp.com)
我自己使用的内网穿透服务商是SakuraFrp,用了两年了,它在不拉胯的时候还是挺好用的。(
内网穿透服务搭建
Windows
由于Windows平台的部分特殊性,所以我的建议是直接使用服务商提供的服务。
以下的教程都将基于SakuraFrp服务商所提供的服务进行。
我并没有接任何的广告,单纯是觉得SakuraFrp好用。
首先进入官网—>管理面板
第一次登陆的话请先注册一个账号。和其他软件的注册流程一样,这里不作过多讲解。
因为某些原因,现在使用SakuraFrp需要进行实名认证(进行实名认证可能会产生几元的费用)
有关隧道创建官方文档已经说的很详尽了。所以我不会再在这里进行更多的讲解。
Linux
Linux平台的话我的建议是使用frpc进行内网穿透操作。
但是前提是您有一个拥有静态公网IP的服务器。
这么做的原因是可以使得带宽受限不那么严重,延迟、负载、风险可控,没有那么多受限于人的规矩。
如果您没有满足以上条件,那么我建议您选择一家内网穿透服务供应商。
一、frp服务端(frps)配置
1、下载
首先请前往官方GitHub页面下载最新版。Releases · fatedier/frp (github.com)
如果没有特殊要求,下载frp_x.xx.x_linux_amd64.tar.gz就行。(x.xx.x指的是frp版本号,请按实际情况替换)
此处的特殊要求指的是服务器cpu架构并非x86_64或amd64的,比如树莓派就需要arm64版本。
请以实际情况为准。
下载frp,在命令行输入并运行以下指令
cd ~
wget https://github.com/fatedier/frp/releases/frp_x.xx.x_linux_amd64.tar.gz
然后解压
tar -zxvf frp_x.xx.x_linux_amd64.tar.gz
将tar.gz文件解压后,使用cd指令进入文件夹
cd frp_x.xx.x_linux_amd64
(文件夹名frp_x.xx.x_linux_amd64请按实际情况替换)
文件夹中应该有以下几样文件
其中,frpc即为frp客户端,frpc.ini即为frp客户端配置文件,frps即为frp服务端,frps.ini即为frp服务端配置文件。
frpc_full.ini和frps_full.ini分别代表frpc与frps配置文件的完整用法,一般不会用到,如果您想深入研究frp的各项用法的话可以使用这个。
2、上传
在您本地保留frpc文件,然后将frps文件通过工具上传到云服务器中。
您也可以通过scp命令进行文件上传操作。
具体用法为:scp [需要上传的文件] [用户名]@[服务器ip]:[想要上传到的路径+文件名]
此处用法可能有误,建议百度,或者直接在云服务器上使用宝塔面板进行上传操作。
宝塔面板 - 简单好用的Linux/Windows服务器运维管理面板 (bt.cn)
请勿将文件上传到根目录或者root目录下,否则可能导致安全性问题。
ssh连接云服务器,使用cd指令切换到您刚才上传的frps所在的目录
然后在命令行输入以下指令并运行(请确保您的用户拥有sudo权限):
sudo mkdir /usr/frp
sudo mv frps /usr/frp/frps
这样,frps就被移动到了/usr/frp/文件夹中。
3、编辑配置文件
Linux上有许多种文本编辑器,您可以选择您所最喜欢的,在这里我选用的是nano。
如果您的云服务器尚未安装nano,您可以通过以下方法安装:
Centos
sudo yum install nano -y
Ubuntu
sudo apt install nano -y
然后您就可以开始着手编辑frps的配置文件了。
在命令行输入以下指令并运行:
sudo nano frps.ini
因为我们并没有上传frps.ini,所以nano会自动创建一个名为frps.ini的新文件。
在nano窗口中输入:
[common]
bind_port = ***
vhost_http_port = ****
dashboard_port = *****
dashboard_user = aaa
dashboard_pwd = bbb
login_fail_exit = true
token = xxx
注:*的个数不代表位数,我的建议是使用4位数的端口。
其中bind_port后面的***替换成您希望frps监听连接的端口。
vhost_http_port后面跟的端口****(请替换成您希望使用的端口,比如80、8080、443)指的是您使用内网穿透映射http流量时,您的http流量会被转发到的端口。举个例子:
您本地的web服务使用80端口,使用http,则您本地运行的frpc会将您映射的80端口的流量发送到云服务器上的***端口,此时frpc与frps建立连接,frps再将您需要映射的http流量映射到****端口,您就可以通过 http://服务器ip:**** 访问您的网站。
但是映射http流量也需要frpc配置文件的配合才能进行,而本文目前只对如何映射tcp流量做出讲解。所以有需求的话请百度,感谢理解。
dashboard_port后面的*****指的是frps监控面板所使用的端口(请替换成您希望使用的端口),
您可以在监控面板中监测流量,设置,以及目前的连接数。您可以通过http://服务器IP:*****进行访问。
dashboard_user后面的aaa是frps监控面板登录所需要的用户名,请替换成您所希望的用户名。
dashboard_pwd后面的bbb是frps监控面板登录所需要的密码,请替换成您所希望的密码。
token后面的xxx指的是本地的frpc与frps建立连接所需要的密码,防止有某些人免认证使用您服务器的内网映射服务,降低风险,请替换成您所希望的密码。
至此,frps配置文件的相关配置就结束了。Ctrl+o保存,ctrl+x关闭nano。
此时,您就可以尝试运行frps以检查配置文件是否出错。请在命令行输入并运行:
./frps
如果没有报错的话,恭喜您,可以进行下一步了。
如果出现了Permission denied等情况,请确保您有该文件的执行权限。或直接在命令行输入并运行:
sudo chmod +x frps
再尝试运行frps应该就可以了。
4、防火墙配置更改(适用于Centos)
您需要放行上文frps配置中所写入的***、****、*****端口(按实际情况进行替换)
请在命令行输入并运行:
sudo firewall-cmd --permanent --zone=public --add-port=***/tcp
sudo firewall-cmd --permanent --zone=public --add-port=***/udp
sudo firewall-cmd --permanent --zone=public --add-port=****/tcp
sudo firewall-cmd --permanent --zone=public --add-port=*****/tcp
sudo firewall-cmd --reload
如果之后您希望映射tcp、udp流量到端口**,则你还需要:
sudo firewall-cmd --permanent --zone=public --add-port=**/tcp
sudo firewall-cmd --permanent --zone=public --add-port=**/udp
sudo firewall-cmd --reload
注:*的个数不代表位数,我的建议是使用4位数的端口。
5、配置系统服务实现开机自启动
大部分Linux系统的系统服务文件都存储在 /etc/systemd/system中
我们需要自行创建一个系统服务文件:
nano /etc/systemd/system/frps.service
然后在nano的窗口输入以下内容:
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/frp/frps -c /usr/frp/frps.ini
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
然后ctrl+o保存,ctrl+x退出。
请在命令行输入并运行:
sudo systemctl enable frps
这样frps就可以开机自启动了。
并且,您不需要再通过前文繁琐的操作来启动frps了。
现在启动frps只需要:
sudo systemctl start frps
停止frps:
sudo systemctl stop frps
二、frp客户端(frpc)配置
在开始前,我需要事先说明,frpc教程将不会包含如何创建系统服务,以免出现一些很玄学的连接问题。因此,你可能需要在每次使用时手动进行启动。
0、移动frpc文件
在前文(一.2上传)中,我提到了您可能需要将frpc文件保留在原处不动,
所以现在,我们回到您本地电脑上之前解压出来的frp文件夹
将frpc文件挪个位置:
cd ~/ frp_x.xx.x_linux_amd64
sudo mkdir /usr/frp
sudo frpc /usr/frp/frpc
此时,您已将frpc移动到了/usr/frp文件夹中
使用cd命令进入该文件夹:
cd /usr/frp
然后您就可以进行下一步操作了
1、编辑配置文件
还是同样的,挑选您最喜欢的文本编辑器,我在这里使用nano。
如果没有安装nano,可以回到一、3按照指令进行安装。
在命令行中输入并运行:
nano frpc.ini
再在出现的nano窗口中输入:
[common]
server_addr = *.*.*.*
server_port = ***
token = xxx
[tcp]
type = tcp
local_ip = 127.0.0.1
local_port = **
remote_port = **
server_addr后的*.*.*.*请替换成您服务器的ipv4地址(我并不确保ipv6可以用)
server_port后的***请替换成上文一、3配置frps的bind_port后面的***,两者端口数须保持一致
token后的xxx请替换成上文一、3配置frps的token后面的xxx,两者内容须保持一致
type后的tcp可以替换为udp,请以您的服务所需要的实际协议为准。
注:tcp或许可以映射http流量
local_ip后的127.0.0.1请按照实际情况替换。如果您就是映射本机流量,则不需要更改。
local_port后的**请替换成您的web服务所使用的端口
remote_port后的**请替换成您想要映射到的(云服务器的)端口
举一个例子:
您将端口这样映射:127.0.0.1:25565/tcp------->*.*.*.*:26676/tcp
则您需要将locai_port填写为25565,remote_port填写为26676
编辑完后,ctrl+o保存,ctrl+x退出
记得在命令行中输入
sudo chmod +x frpc
2、运行
现在我们需要创建一个启动脚本(start.sh),为了方便,我们将会把这个启动脚本放在用户根目录,这样当你每次登录您用来创建脚本的这个用户时,您可以直接输入“./start.sh”来启动frpc。
新建一个start.sh文件:
cd ~
nano start.sh
在打开的nano窗口中输入:
cd /usr/frp
./frpc -c /usr/frp/frpc.ini
然后ctrl+o保存,ctrl+x退出。
之后,您只需要在命令行中输入并运行:
./start.sh
您的frpc就能正常启动啦!!!
注:您也可以搭配screen软件实现用户注销时后台的frpc不被终止
三、结语/关于其他
感谢您的阅读。
下一篇文章我还没有想好写什么,所以暂时没有预告。
如果您有更好的改进建议,请在评论区留言或者发送邮件到 illusorynight@qq.com或amenai@amenai.ml
Comments NOTHING