Proxyer:一款简单且带Web面板的内网穿透工具

最近博主发现了个新的内网穿透项目Proxyer,目前仅支持TCP协议、虽然看起来功能比较简单,但基本可以满足日常使用了,特别是在安装和使用方面,对于新手是比较友好的,这里就分享下。

服务端

Github地址:https://github.com/khvysofq/proxyer

1、安装Docker

#CentOS 6
rpm -iUvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum update -y
yum -y install docker-io
service docker start
chkconfig docker on

#CentOS 7、Debian、Ubuntu
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker

2、安装Docker Compose

curl -L "https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

3、安装Proxyer

wget https://raw.githubusercontent.com/khvysofq/proxyer/master/docker-compose.yml
#请将后面1.1.1.1改成你的服务器ip地址后再运行
export PROXYER_PUBLIC_HOST=1.1.1.1
docker-compose up -d

安装完成后,就可以通过ip:6789访问服务端WEB管理面板了,进去后需要设置一个客户端认证密码。

然后CentOS系统建议关闭防火墙使用,或者打开部分端口也行,关闭命令:

#CentOS 6系统
service iptables stop
chkconfig iptables off

#CentOS 7系统
systemctl stop firewalld
systemctl disable firewalld

像阿里云等服务器,还需要去安全组那里开放下端口。

客户端

进入服务端面板后,界面会提供LinuxWindowsmacOS客户端版本,然后自行根据自身系统下载指定版本的压缩包即可。

Windows可以直接下载界面版本,然后双击可执行文件,会弹出一个网页界面,输入上面的认证密码,即可开始配置穿透。

Linux下载压缩包后,解压出二进制文件,直接在当前目录使用./proxyer命令运行即可。

最后使用起来还是很简单的,由于是新项目,功能可能不是很丰富,看作者后期会不会慢慢完善了。

sish:一个开源、轻量且类似于Serveo/Ngrok的内网穿透工具

说明:sish是一个SSH服务器,仅用于远程端口转发,可以快速将本地端口暴露在外网,作者声称其为Servo/Ngrok替代方案,仅使用SSHHTTP(S)WS(S)TCP隧道连接到他们的localhost服务器,该工具和Servo差不多一样,不同就是Servo官方提供了免费的SSH客户端,而sish作者提供的客户端貌似因为滥用关闭了,所以就需要我们自己搭建了,这里就水下手动安装。

手动安装

Docker虽然方便很多,但也有人会喜欢手动安装,这里作者没直接给出二进制文件,所以就需要我们手动来构建二进制文件了。

1、安装Go
这里由于需要新版的Go环境,所以这里就使用Go二进制包安装环境,下载地址→传送门

然后根据自己的服务器架构下载对应的最新安装包,一般可以直接使用命令:

#32位系统下载
wget -O go.tar.gz https://dl.google.com/go/go1.13.3.linux-386.tar.gz
#64位系统下载
wget -O go.tar.gz https://dl.google.com/go/go1.13.3.linux-amd64.tar.gz

#解压压缩包
tar -zxvf go.tar.gz -C /usr/local
#设置环境变量,将以下一起复制进ssh客户端运行
mkdir $HOME/go
echo 'export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> /etc/profile
source /etc/profile
#查看go版本,有输出即为安装成功
go version

2、安装sish

#下载源码到主目录
git clone https://github.com/antoniomika/sish
cd sish
#编译二进制文件
go install

这里提示-bash: git: command not found的,可以先使用命令:

#CentOS
yum -y install git

#Debian、Ubuntu
apt install git -y

3、运行sish
运行参数这里就不贴了,直接参考上面Docker安装最下面的全部参数就行了。

先解析一个主/泛域名到服务器ip,比如解析urdomain.com*.urdomain.com到服务器ip

这里就贴个大概需要使用的参数,其它的根据需求自行修改,使用命令:

#配置http域名
sish -sish.addr=:3333 -sish.http=:80 -sish.domainurdomain.com -sish.forcerandomsubdomain=false -sish.bindrandom=false -sish.redirectrootlocation https://www.urdomain.com -sish.keysdir=/sish/pubkeys -sish.pkloc=/sish/keys/ssh_key #配置https域名 sish -sish.addr=:3333 -sish.https=:443 -sish.http=:80 -sish.domainurdomain.com -sish.forcerandomsubdomain=false -sish.bindrandom=false -sish.httpsenabled=true -sish.redirectrootlocation https://www.urdomain.com -sish.keysdir=/sish/pubkeys -sish.pkloc=/sish/keys/ssh_key -sish.httpspems=/sish/ssl 

部分参数详解:

-sish.addr=:3333  #ssh监听地址,这里为3333
-sish.forcerandomsubdomain=false  #是否强制随机子域,这个建议关掉
-sish.bindrandom=false  #是否随机绑定端口,这个建议关掉
-sish.domainurdomain.com #使用的域名 -sish.redirectrootlocation https://www.baidu.com #主域名(-sish.domain参数)强制跳转到该地址 -sish.httpspems=/sish/ssl #泛域名SSL证书存放路径,证书命名格式fullchain.pem和privkey.pem -sish.keysdir=/sish/pubkeys #pubkey auth的公共密钥存放文件夹 -sish.pkloc=/sish/keys/ssh_key #SSH服务器私钥

这里/sish/ssl/sish/pubkeys/sish/keys目录需要自己提前创建下,使用命令:

mkdir -p /sish/ssl /sish/pubkeys /sish/keys

4、开机自启
如果你使用手动命令没问题了,先使用Ctrl+C断开命令。

再新建systemd配置文件,适用CentOS 7Debian 8+Ubuntu 16+

#修改成你手动运行命令的全部参数
command="-sish.addr=:3333 -sish.http=:80 -sish.domain urdomain.com -sish.forcerandomsubdomain=false -sish.bindrandom=false -sish.redirectrootlocation https://www.urdomain.com -sish.keysdir=/sish/pubkeys -sish.pkloc=/sish/keys" #将以下代码一起复制到SSH运行 cat > /etc/systemd/system/sish.service <<EOF [Unit] Description=sish After=network.target [Service] Type=simple ExecStart=$(command -v sish) ${command} Restart=on-failure [Install] WantedBy=multi-user.target EOF 

启动并设置开机自启:

systemctl start sish
systemctl enable sish

最后CentOS系统建议关闭防火墙使用,或者打开部分端口也行,关闭命令:

#CentOS 6系统
service iptables stop
chkconfig iptables off

#CentOS 7系统
systemctl stop firewalld
systemctl disable firewalld

像阿里云等服务器,还需要去安全组那里开放下端口。

 

使用

使用要求:可以使用SSH,并且能连接到互联网,LinuxWindows等系统都行。

以下所使用的urdomain.com
为上面配置好的客户端域名地址,自行修改成自己的即可。

1、转发HTTP(S)
将本地3000端口穿透到公网中,使用命令:

#要转发其它端口的自行替换
ssh -p 3333 -R 80:localhost:3000 urdomain.com

第一次如果有提示,选择yes即可,之后会为你随机生成一个urdomain.com的二级域名,然后就可以使用浏览器间接访问本地的localhost:3000了。

如果要指定二级域名,可以使用命令:

#这里默认为no1.urdomain.com,自行替换即可 ssh -p 3333 -R no1:80:localhost:3000 urdomain.com 

此时你就可以在外网使用no1.urdomain.com访问你本地的localhost:3000了。

2、转发TCP
将本地6789端口穿透到公网的9876端口中,使用命令:

#可以自行设置公网端口,这里默认6789,如果你要转发SSH端口,那就改成你的SSH端口
ssh -p 3333 -R 9876:localhost:6789 urdomain.com

这里只说了下简单用法,客户端我们还可以设置国家/地区、IP白名单等,使用参考→传送门

Serveo:一款简单的内网穿透工具,无需安装即可使用

说明:Serveo是一个SSH服务器,仅用于远程端口转发,可以快速将本地端口暴露在外网。官方声称其为Ngrok的绝佳替代品,对其优点是使用现有的SSH客户端,无需安装客户端即可完成端口转发。当用户连接到Serveo时,他们会获得一个公共URL,任何人都可以使用它来连接到他们的localhost服务器。

使用

官方地址:http://serveo.net

使用要求:可以使用SSH,并且能连接到互联网,LinuxWindows等系统都行。

1、转发HTTP
将本地3000端口穿透到公网中,使用命令:

#要转发其它端口的自行替换
ssh -R 80:localhost:3000 serveo.net

第一次如果有提示,选择yes即可,之后会为你随机生成一个serveo.net二级域名,然后就可以使用浏览器间接访问本地的localhost:3000了。

如果要指定二级域名,可以使用命令:

#这里默认为xyz.serveo.net,自行替换即可
ssh -R xyz:80:localhost:3000 serveo.net

此时你就可以在外网使用xyz.serveo.net访问你本地的localhost:3000了。

2、转发SSH
将本地22端口穿透到公网中,使用命令:

#可以自行设置名称,这里默认rats
ssh -R rats:22:localhost:22 serveo.net

接下来就可以登录该内网服务器了,使用命令:

ssh -J serveo.net root@rats

3、转发TCP
将本地1492端口穿透到公网中,使用命令:

#可以自行设置公网端口,这里默认1492
ssh -R 1492:localhost:1492 serveo.net
 

进程守护

这里官方推荐使用AutoSSH,作用是一旦SSH连接超时或停止传递流量,则根据需要重新启动它。

1、安装AutoSSH

#Debian/Ubuntu系统
apt install autossh -y

#CentOS系统
yum install autossh -y

2、使用Systemd

只适用于CentOS 7Debian 8+Ubuntu 16+等。

#输入你的转发命令,去掉开头的ssh即可
serveo="-R 80:localhost:3000 serveo.net"
#将以下代码一起复制到SSH运行
cat > /etc/systemd/system/autossh.service <<EOF
[Unit]
Description=autossh
After=network.target

[Service]
Type=simple
Environment="AUTOSSH_GATETIME=0"
ExecStart=$(command -v autossh) -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" $serveo
Restart=on-abort

[Install]
WantedBy=multi-user.target
EOF

开始启动并设置开机自启:

systemctl start autossh
systemctl enable autossh

最后更多的命令和使用可以直接查看官方文档→传送门

Holer:一款带Web管理界面的内网穿透工具

说明:我们很多家用电脑或者公司内网电脑都没有公网IP,导致我们在外面的时候就不能直接进行远程连接操作,这里就需要用到内网穿透工具了,一般我们都会用到ngrok、花生壳、frp,这里博主就介绍个工具HolerHoler是一个免费开源的内网穿透工具,它可以将局域网服务器代理到公网的内网穿透工具,支持转发基于TCP协议的报文,而且不需要我们额外使用服务器配置服务端,使用起来非常方便。
 

远程设置

首先我们先需要在被远程的电脑上开启远程桌面设置和配置Holer,本文教程以Windows 7为例,如果其它系统设置不一样的请自行百度/谷歌。
1、设置本地管理员账号和密码
一般电脑超级管理员账号都是Administrator,而密码也许很多人没设置,这里就大概说下方法。
先点击左下角开始-控制面板-添加或删除用户,然后自行设置或修改管理员密码。
-----------------
一个免费的内网穿透工具Holer它是可以将局域网内的服务器代理到公网的内网穿透工具,支持转发基于TCP等协议的报文,现在服务端代码已经开源了,而且带Web管理面板,这里就大概说下,我们就可以拿来自建一个内网穿透服务器,使用效果还不错。

安装服务端

支持系统:WindowsLinux系统,这里只说Linux搭建,建议直接Debain
说明:由于该面板使用的JAVA,所以还是比较消耗内存的,如果内存太小,建议先加一点虚拟内存,可以使用Swap一键脚本.
1、安装JAVA
#CentOS系统
yum install java-1.8.0-openjdk -y

#Debian/Ubuntu系统
apt update
apt install default-jdk -y
2、安装Mysql
#CentOS 6系统
rpm -ivh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm
yum install mysql-community-server -y
service mysqld start
chkconfig mysqld on

#CentOS 7系统
rpm -ivh http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld

#Debian/Ubuntu系统
apt install mysql-server -y
如果DebianUbuntu在安装期间有弹出窗口要你输入密码就设置一个,没有的话密码就是空格。
修改数据库密码:
#CentOS系统,第一行登录数据库的时候直接Enter跳过,第二行moerats为要修改的密码,自行修改
mysql -u root -p
mysql> set password=password("moerats");
mysql> exit;

#Debian、Ubuntu系统,第一行登录数据库的时候直接Enter跳过,第二行moerats为要修改的密码,自行修改
mysql -u root -p
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('moerats'), PLUGIN='mysql_native_password' WHERE USER='root';
mysql> exit;
最后修改过密码的还需要重启数据库:
#CentOS系统
service mysqld restart

#Debian和Ubuntu系统
systemctl restart mysql
此时Mysql算是安装完成了。
3、安装源码
安装unzip
#CentOS系统
yum install unzip -y

#Debian和Ubuntu系统
apt install unzip -y
下载源码:
wget https://github.com/wisdom-projects/holer/releases/download/v1.1/holer-server-1.1.zip
unzip holer-server-1.1.zip && rm -rf holer-server-1.1.zip
#移动到opt目录,然后进入到源码文件夹
mv holer-server /opt/holer && cd $_
#修改配置文件
nano resources/application.yaml
关键配置如下:
#运行端口
server:
  port: 600

#Mysql数据库用户名和密码
spring:
  datasource:
    username: root
    password: moerats

#域名和nginx目录,可以直接全部删掉,用ip不需要,域名的话,有点不好用
holer
  domain:
    name: your-domain.com
  nginx:
    #home: /usr/local/nginx
    home: C:/nginx-1.14.2
修改后使用Ctrl+xy保存退出,或者可以直接使用FTP等工具直接编辑。
再修改管理员用户名和密码,使用命令:
nano resources/conf/holer-data.sql
adminadmin123为管理员用户名和密码,自行修改,修改完成后同样的使用Ctrl+xy保存退出。
最后启动:
chmod +x holer
./holer start
如果想开机自启的话,这里可以建一个简单的systemd配置文件,且不适用CentOS 6,使用命令:
#将以下代码一起复制到SSH运行
cat > /etc/systemd/system/holer.service <Unit
] Description=holer After=network.target [Service] Type=simple ExecStart=$(command -v java) -server -Xms256m -Xmx512m -jar holer-server-1.1.jar WorkingDirectory=/opt/holer Restart=on-failure [Install] WantedBy=multi-user.target EOF
然后启动并设置开机自启:
systemctl start holer
systemctl enable holer
然后就可以使用ip:600访问管理界面了,具体端口以你修改的为准。
然后CentOS系统建议关闭防火墙使用,或者打开部分端口也行,关闭命令:
#CentOS 6系统
service iptables stop
chkconfig iptables off

#CentOS 7系统
systemctl stop firewalld
systemctl disable firewalld
像阿里云等服务器,还需要去安全组那里开放下端口。
 

客户端使用

首先我们需要去用户列表新建一个用户,然后再去端口映射选择该用户,新建一个穿透规则,这里根据需求自行选择,然后设置好时长。
然后就可以直接在客户端使用了,一般客户端有JAVAGO版,使用JAVA的话,需要先安装JAVA环境,所以这里直接选择GO版本,简单粗暴。
首先根据直接的系统和架构下载指定的GO版客户端,每个压缩包里都包含32位和64位,下载地址→传送门
这里拿我们常见的Linux服务器架构来说,直接使用命令:
#下载并解压
wget https://github.com/wisdom-projects/holer/raw/master/Binary/Go/holer-linux-x86.tar.gz
tar -zxvf holer-linux-x86.tar.gz

#32位启动,分别为访问秘钥和服务端ip地址
nohup ./holer-linux-386 -k 7aa8d973bc8e40 -s ip地址 &
#64位启动
nohup ./holer-linux-amd64 -k 7aa8d973bc8e40 -s ip地址 &
如果是Windows系统,先把压缩包下载并解压到D盘根目录,然后按住Win+R,输入cmd进入命令窗口,使用命令:
#进入到D盘根目录
cd D:\

#32位启动,分别为访问秘钥和服务端ip地址
.\holer-windows-386.exe -k 7aa8d973bc8e40 -s ip地址
#64位启动
.\holer-windows-amd64.exe -k 7aa8d973bc8e40 -s ip地址
到这里基本上就运行成功了。
 

域名反代

如果你想使用域名来配置服务器面板的话,就需要安装Web服务器了,这里就直接使用Nginx
1、安装Nginx
#CentOS 6系统
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
yum install nginx -y
service nginx start
chkconfig nginx on

#CentOS 7系统
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx -y
systemctl start nginx
systemctl enable nginx

#Debian/Ubuntu系统
apt install nginx -y
2、申请SSL证书
这里就使用简单粗暴的webroot方式签发Let's Encrypt证书,首先解析好域名并生效。
安装letsencrypt
#CentOS系统
yum install letsencrypt -y

#Debian/Ubuntu系统
apt install letsencrypt -y
申请SSL证书:
#CentOS系统
letsencrypt certonly --webroot -w /usr/share/nginx/html --domain www.urdomain.com

#Debian/Ubuntu系统
letsencrypt certonly --webroot -w /var/www/html --domain www.urdomain.com
请替换成自己域名后运行,期间会要你输入邮箱和A选项啥的,申请后证书文件在/etc/letsencrypt/live
3、新建conf文件
#将下面域名修改成自己的,然后证书路径也修改下,再一起复制进SSH客户端运行
cat > /etc/nginx/conf.d/holer.conf << 'EOF'
server {
    listen 443;
    server_name www.urdomain.com;        ssl on;
    ssl_certificate /etc/letsencrypt/live/www.urdomain.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/www.urdomain.com/privkey.pem;    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_session_cache builtin:1000 shared:SSL:10m;
    charset utf-8;
    location /{
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        client_max_body_size       1024m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
        proxy_pass http://127.0.0.1:600/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
server
    {
        listen 80;
        server_name www.urdomain.com;        rewrite ^(.*) https://www.urdomain.com$1 permanent;    }
EOF
重启Nginx生效:
systemctl restart nginx
最后连接的时候,就可以填域名了。
最后要是觉得搭建服务器麻烦,或者不想搭建的,可以使用作者提供的免费服务,更多使用方法移至→传送门