Coding Studio搞事新方法:通过内网穿透打穿SSH连接隧道(附评测)

前言:完成此篇教程,你需要:

  • 一台Coding Studio专用主机 > 注册Coding.net <
  • 一台具有公网IP的主机(正常的服务器就可以)
  • SSH客户端(用于远程连接配置)

今天看到了Coding家的Cloud Studio专用主机,

(什么?你不知道? > 猛戳这里了解下 <

看到了免费使用一个月腾(liang)讯(xin)云(yun)专用主机的活动,

遂申请之。

到手的服务器是腾讯云的建站主机,地域成都(官网没上架售卖),

然后开始疯狂研究。

研究了很长时间,发现个很恐怖的事情……

这机器所有外网端口都是关着的?????

这可不好玩了,所有外网端口全关着,也就意味着不能主动连接(客户端->服务端),

只能通过映射端口或者被动连接的方式上线。

然后点了下映射端口,临时映射了个8080端口。

结果Xshell依然坚强的不能连接。

SMG???这都连不上???

然后Ping了下给的临时地址,感觉好像没什么不对的……

………………

……等等?

临时地址的IP和我服务器的IP好像不一样?

比对一下,果然……

然后直接访问了映射端口的80,

直接返回个页面告诉我映射有误……

我TM……原来临时地址就他娘的就是个反代!

看来所有主动连接的方式全不能用了,

只能从被动连接的方式入手了。

所以,开始这篇教程,用另类方法成功打穿SSH隧道,实现SSH配置服务器。

由于我不太确定这样做是否违反腾讯云建站主机和Coding专用主机的相关ToS,所以请谨慎使用!

2. Just do it !

Step 1 :打开Cloud Studio

首先,打开你的Coding.net的Cloud Studio https://studio.coding.net/,然后整个界面长这个样子:

coding-studio-indexpage.png

然后下方就是我们需要用到的终端(Terminal),第一阶段的操作将在这里完成。

然后我在测试的时候,按下回车会自动变成两次回车(Chrome浏览器),不知道是不是终端的问题。

如果自动变成两次,按照下面的特殊说明部分操作,如果是一次,正常操作即可。

Step 2 :战场侦查(分析系统环境)

再怎么专用主机(建站主机),终归是个Linux系统,对吧?

首先,我们来确定下这台专用主机用的是什么系统。

先运行命令:

ls /etc | grep release

先来判断下专用主机是什么系统。

然后返回了如下结果:

lsb-release
os-release

出现了lsb标注,基本上可以判断是Ubuntu/Debian系统。

然后我们进一步判断到底是什么系统,执行命令:

cat /etc/lsb-release

返回结果:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS"

确认是 Ubuntu 16.04,接下来的操作将会使用Ubuntu/Debian系的命令进行操作。

Step 3:夺取root权限

如果你按一次回车,终端同样也是一次回车,那么请执行命令:

sudo passwd root

来修改root密码。

如果你按一次回车,终端返回的是两次回车的话,那么可能要稍微麻烦点:

首先,我们新建个临时的文本文件:

vim passwd.txt

然后在里面写入你的密码,记住要写两行一模一样的(如果回车后自动跳到第三行,删掉一行即可):

ilemonrain
ilemonrain

之后 Esc - :wq 保存退出。

保存完成后,执行命令,修改密码:

sudo passwd root < passwd.txt

其实这样做的目的,是为了模拟输入的过程,一行文本为一条命令,完成一行后自动回车。此原理可以用来制作一键脚本中需要交互的部分。

记得删除你的临时密码文件!防止泄露root密码!

之后,开始切换到root,夺取系统最高权限:

su -

然后输入你的密码,夺取最高权限。当返回如下结果:

root@coding~#

大功告成!成功拿下了root权限!

Step 4:安装OpenSSH-Server (SSH服务器)

拿下了root权限,也就意味着我们对这台专用主机拥有了最高权限。

接下来,常规一把梭,更新系统:

apt update && apt upgrade -y

更新完成后,开始安装OpenSSH-Server (SSH服务器):

apt install openssh-server -y

在安装完成后,修改SSH服务器配置文件,使得root用户可以通过SSH登录:

sed -i "/PermitRootLogin/s/prohibit-password/yes/" /etc/ssh/sshd_config

之后,重启(也可以启动)SSH服务器端:

service ssh restart

先本地验证下SSH服务器端是否正常工作:

ssh 127.0.0.1

如果没有返回Connection refused等错误,说明SSH服务器启动正常,进入下一步。

Step 5:配置frp服务端

Cloud Studio这边暂时放一边,我们先登录用来做内网穿透的服务器。

登录上去后,我们下载frp组件:

wget https://github.com/fatedier/frp/releases/download/v0.19.1/frp_0.19.1_linux_amd64.tar.gz

frp客户端和服务端都在一个压缩包中!

之后解压:

tar xvf frp_0.19.1_linux_amd64.tar.gz

进入目录:

cd frp_0.19.1_linux_amd64

我们来看下里面都有什么文件:

frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE

frpc:frp的客户端程序
frpc_full.ini:frp客户端的完整版配置文件
frpc.ini:frp客户端的简易配置文件
frps:frp的服务端程序
frps_full.ini:frp服务端的完整版配置文件
frps.ini:frp服务端的简易配置文件
LICENSE:许可文件,没卵用

接下来,我们编辑用作服务端配置的 frps.ini 文件:

[common]
bind_port = 7000

[common]:基础设置部分
bind_port:frp服务端的控制端口

为了frp服务器的安全,防止被非法使用,我们可以对frp服务端加上 auth_token ,作为连接到frp服务器需要的密码。在配置文件最后追加一行:

auth_token = ilemonrain

然后保存退出。

之后执行命令,启动frp服务端:

./frps -c frps.ini

会得到如下结果,说明frp服务器启动成功。接下来,将内网穿透服务器放在一旁,回到Cloud Studio中。

Step 6:配置frp客户端

和配置服务端一样,下载解压frp程序包:

wget https://github.com/fatedier/frp/releases/download/v0.19.1/frp_0.19.1_linux_amd64.tar.gz
tar xvf frp_0.19.1_linux_amd64.tar.gz
cd frp_0.19.1_linux_amd64

然后接下来我们用到的就是frp客户端了。编辑客户端文件 frpc.ini

vim frpc.ini
[common]
server_addr = 127.0.0.1
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
auth_token = ilemonrain

[common]:基础设置部分
server_addr:内网穿透服务器的地址
server_port:内网穿透服务器绑定的控制端口
[ssh]:客户端名称,在内网穿透服务器连接的所有客户端中全局唯一
type:协议类型
local_ip:本地IP地址,默认127.0.0.1即可
local_port:需要映射的端口
remote_port:远程请求进行映射的端口
auth_token:连接密码,请与服务端保持一致

根据实际情况进行修改,完成后保存退出。

接下来,启动frp客户端,使frp客户端与服务端建立连接:

./frpc -c frpc.ini

如果一切顺利的话,客户端将会看到如下信息:

2018/05/31 11:16:24 [proxy_manager.go:300] proxy removed: []
2018/05/31 11:16:24 [proxy_manager.go:310] proxy added: [ssh]
2018/05/31 11:16:24 [proxy_manager.go:333] visitor removed: []
2018/05/31 11:16:24 [proxy_manager.go:342] visitor added: []
2018/05/31 11:16:25 [control.go:246] [0d8b777afd83c4b7] login to server success, get run id [0d8b777afd83c4b7], server udp port [0]
2018/05/31 11:16:25 [control.go:169] [0d8b777afd83c4b7] [ssh] start proxy success

同时服务端也会看到如下信息:

2018/05/31 19:13:20 [I] [service.go:122] frps tcp listen on 0.0.0.0:7000
2018/05/31 19:13:20 [I] [root.go:190] Start frps success
2018/05/31 19:13:23 [I] [service.go:299] client login info: ip [x.x.x.x:45954] version [0.19.0] hostname [] os [linux] arch [amd64]
2018/05/31 19:13:23 [I] [proxy.go:203] [9618f23483372a7c] [ssh] tcp proxy listen port [6000]
2018/05/31 19:13:23 [I] [control.go:335] [9618f23483372a7c] new proxy [ssh] success

此时内网穿透隧道已经打通,新建个SSH客户端窗口,连接到 [你的内网隧道服务器地址]:[客户端请求的端口],本教程中为:

x.x.x.x:6000

会发现SSH连接已经建立,使用上面设置的root密码,以root身份登录,即可完成SSH内网穿透。

连接期间请保持frp客户端和服务端正常工作,两者有一者中断,都将导致隧道断开!如果需要后台运行,请使用screen方式或者nohup方式!

3. 顺便评测下专用主机

系统:Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-91-generic x86_64)
虚拟化:KVM (我怀疑是假的KVM,初步怀疑是Docker,因为很多功能都用不了,后面会提到)
vCPU:1x Intel(R) Xeon(R) CPU E5-26xx v4 (2.4GHz)
内存:1GB (实际可用864MB,885080 kB)
磁盘:50GB SSD (测试写入速度463MB/s)
带宽:1M对等
服务器地域:中国成都

Zbench 测试结果:
(因网络太慢,放弃网络部分测试)

CPU 型号 : Intel(R) Xeon(R) CPU E5-26xx v4
CPU 核心数 : 1
CPU 频率 : 2399.988 MHz
总硬盘大小 : 100.1 GB (19.2 GB Used)
总内存大小 : 864 MB (174 MB Used)
SWAP大小 : 0 MB (0 MB Used)
开机时长 : 1 days, 4 hour 35 min
系统负载 : 0.02, 1.32, 1.44
系统 : Ubuntu 16.04.4 LTS
架构 : x86_64 (64 Bit)
内核 : 4.4.0-91-generic
虚拟化平台 : kvm

硬盘I/O (第一次测试) : 431 MB/s
硬盘I/O (第二次测试) : 610 MB/s
硬盘I/O (第三次测试) : 484 MB/s

DD 4K写入测试结果:

root@coding:~# dd if=/dev/zero of=4k-test bs=4k count=200000 conv=fdatasync
200000+0 records in
200000+0 records out
819200000 bytes (819 MB, 781 MiB) copied, 1.83557 s, 446 MB/s
root@coding:~#

Speedtest 网络测试结果:

root@coding:~# speedtest
Retrieving speedtest.net configuration...
Testing from Tencent cloud computing (x.x.x.x)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by China Mobile Group Beijing Co.Ltd (Beijing) [1.69 km]: 81.105 ms
Testing download speed................................................................................
Download: 1.58 Mbit/s
Testing upload > speed................................................................................................
Upload: 1.34 Mbit/s
root@coding:~#

UnixBench 综合测试结果:

BYTE UNIX Benchmarks (Version 5.1.3)

System: coding.ide: GNU/Linux
OS: GNU/Linux -- 4.4.0-91-generic -- #114-Ubuntu SMP Tue Aug 8 11:56:56 UTC 2017
Machine: x86_64 (x86_64)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Xeon(R) CPU E5-26xx v4 (4800.0 bogomips) Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
11:36:43 up 1 day, 4:01, 1 user, load average: 0.20, 0.14, 0.05; runlevel

Benchmark Run: Thu May 31 2018 11:36:43 - 12:04:44
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 27409198.1 lps (10.0 s, 7 samples)
Double-Precision Whetstone 3880.0 MWIPS (10.0 s, 7 samples)
Execl Throughput 4502.9 lps (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 638735.6 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 222142.3 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1399397.3 KBps (30.0 s, 2 samples)
Pipe Throughput 1471353.8 lps (10.0 s, 7 samples)
Pipe-based Context Switching 264169.7 lps (10.0 s, 7 samples)
Process Creation 13335.9 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 5958.5 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 764.7 lpm (60.0 s, 2 samples)
System Call Overhead 1208121.6 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 27409198.1 2348.7
Double-Precision Whetstone 55.0 3880.0 705.5
Execl Throughput 43.0 4502.9 1047.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 638735.6 1613.0
File Copy 256 bufsize 500 maxblocks 1655.0 222142.3 1342.2
File Copy 4096 bufsize 8000 maxblocks 5800.0 1399397.3 2412.8
Pipe Throughput 12440.0 1471353.8 1182.8
Pipe-based Context Switching 4000.0 264169.7 660.4
Process Creation 126.0 13335.9 1058.4
Shell Scripts (1 concurrent) 42.4 5958.5 1405.3
Shell Scripts (8 concurrent) 6.0 764.7 1274.4
System Call Overhead 15000.0 1208121.6 805.4

System Benchmarks Index Score 1219.4

其实说实话,这台Coding Studio的建站主机,对于建站新手或者入门开发者来讲,真的是完美的选择。

结合Coding Studio的面板,用来做开发真的很舒服。

但就单独把服务器拿出来讲的话,这台机器似乎并不那么好用。

首选说说虚拟化。

虽然 virt-what 跑出来的结果是 KVM ,但实际使用过程中发现很多功能都实现不了:

  • 激活Swap (X)
  • 重启服务器 (X)
  • 应用sysctl改动 (X)

这更让我怀疑,这不是货真价实的KVM虚拟机。

然后接下来,我使用 df -h 命令确认了下磁盘分区情况:

root@coding:~# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 50G 9.6G 38G 21% /
tmpfs 64M 0 64M 0% /dev
tmpfs 433M 0 433M 0% /sys/fs/cgroup
/dev/vda1 50G 9.6G 38G 21% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 433M 0 433M 0% /proc/scsi
tmpfs 433M 0 433M 0% /sys/firmware
root@coding:~#

overlay这货不是Docker的“专利”么?

所以我确定,专用主机(也就是腾讯云的建站主机),

其实就是Docker虚拟机!

虽然我之前有做过几个一键开站环境 (ilemonrain/cloudreve) (ilemonrain/lamp) (ilemonrain/lnmp),

但像这样能够用在商业化的生产环境中,我还是第一次看到……

然后说说那个“公网IP”。

确实是个公网IP,不过只能Ping通有什么用?

非黄金会员开端口只能开1个小时?

国内的服务器,基本上免备开站无缘。

真的,说句实在话,这个价钱,我还不如买台Cloudcone……

所以总的来讲,

如果你是开发者,新人站长,新手开发者,或者干脆是为了尝鲜,那么Cloud Studio是你的最佳选择;

如果你需要追求极致折腾,或者正经建站,Cloud Studio可能不是为你而生。

(以上皆属于胡说八道,如有不适请右上角,如希望撤掉文章评测区或者对文章内容有疑义,欢迎E-mail到:ilemonrain#ilemonrain.com)

最后修改:2018 年 05 月 31 日 08 : 26 PM
搞技术/肝文章不易,恳请打赏 OwO

发表评论