在本地电脑上进行内网穿透

发布于 2022-04-22  6.17k 次阅读


由于中国现在的网络环境问题,以及目前全球ipv4资源紧缺,大部分家用宽带没有一个完全属于自己的公网ip。就算有,也只有被运营商封禁部分端口的动态公网ip,并不满足搭建服务器的条件。所以,本文旨在通过使用内网穿透技术来实现在家中搭建服务器的想法。

零、使用前准备

您可能需要一台拥有静态公网ip的服务器。

如果您没有的话,您可能需要找一家内网穿透服务商。

目前国内提供内网穿透的服务商有这样几家:

  1. 贝锐|花生壳 贝锐官网|花生壳官网|DNS内网穿透|域名注册|向日葵远程控制|远程桌面|蒲公英路由器-贝锐官网 (oray.com)
  2. 神卓互联 神卓互联-内网穿透|DDNS|端口映射工具 (shenzhuohl.com)
  3. 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

Spread the love
届ける言葉を今は育ててる
最后更新于 2022-04-24