前言:最近要上信息检索课(其实就是Python入门),老师要求自带笔记本使用 Jupyter Notebook 来进行代码练习。想到这游戏本又大又重续航差,所以我决定使用 内网穿透 的技术,将运行在本机的服务端口映射到公网上,然后在课上使用 iPad+妙控键盘 就能轻松完成代码编写!(为啥不直接把 Jupyter Notebook 装在服务器上?因为懒!

一. 介绍

使用内网穿透,能干啥?

举个例子,我写了个SpringBoot应用并运行在了8080端口上,此时我可以在本机通过 localhost:8080 端口访问。那么我想在其他电脑上访问呢?只要把这个8080端口映射到公网上,我们就可以通过公网IP+端口号的形式在任意一台联网的计算机访问了。

专业解释可以百度 / Google 一下。

二. 准备

我们将会使用 frp 作为内网穿透的工具,首先你得具备:本地计算机 + 云服务器。

frp工具地址:https://github.com/fatedier/frp/releases

在本地计算机和云服务器上下载好frp工具,注意版本号要一致!

Github点击下载:

p1-下载frp

或者使用命令下载:

1
2
# 以CentOS为例
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz

下载好后解压,进入文件夹

三. 配置信息

在选择公网映射端口前,请先看以下内容:

Google Chrome 默认非安全端口列表,默认无法通过游览器正常访问,注意避免以下端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
1,    // tcpmux
7, // echo
9, // discard
11, // systat
13, // daytime
15, // netstat
17, // qotd
19, // chargen
20, // ftp data
21, // ftp access
22, // ssh
23, // telnet
25, // smtp
37, // time
42, // name
43, // nicname
53, // domain
77, // priv-rjs
79, // finger
87, // ttylink
95, // supdup
101, // hostriame
102, // iso-tsap
103, // gppitnp
104, // acr-nema
109, // pop2
110, // pop3
111, // sunrpc
113, // auth
115, // sftp
117, // uucp-path
119, // nntp
123, // NTP
135, // loc-srv /epmap
139, // netbios
143, // imap2
179, // BGP
389, // ldap
465, // smtp+ssl
512, // print / exec
513, // login
514, // shell
515, // printer
526, // tempo
530, // courier
531, // chat
532, // netnews
540, // uucp
556, // remotefs
563, // nntp+ssl
587, // stmp?
601, // ??
636, // ldap+ssl
993, // ldap+ssl
995, // pop3+ssl
2049, // nfs
3659, // apple-sasl / PasswordServer
4045, // lockd
6000, // X11
6665, // Alternate IRC [Apple addition]
6666, // Alternate IRC [Apple addition]
6667, // Standard IRC [Apple addition]
6668, // Alternate IRC [Apple addition]
6669, // Alternate IRC [Apple addition]

下面我将以映射本地http的8888端口到公网IP的6001端口为例,至于其他协议及映射配置可以举一反三。

服务端配置

frps 开头的文件是给服务端用的,配置文件名 frps.ini ,可以使用vim编辑器添加以下内容:

1
2
3
4
5
6
bind_port = 7000            # frp服务端运行端口(服务端端口)
vhost_http_port = 6001 # 监听http的访问请求端口(服务端端口)

dashboard_port = 7500 # frp控制面板端口(服务端端口)
dashboard_user = admin # 控制面板用户名
dashboard_pwd = admin # 控制面板密码

保存好这个配置文件后,后台运行frp

1
nohup ./frps -c ./frps.ini &

客户端配置

frpc 开头的文件是给客户端用的,配置文件名 frpc.ini ,内容如下:

1
2
3
4
5
6
7
8
9
10
11
[common]
server_addr = xx.xx.xxx.xx # 服务器公网IP(服务端端口)
server_port = 7000 # 对应服务端的 bind_port

# 下面的jupyter为映射名,可以自定义
[jupyter]
type = http # 请求方式
local_ip = 127.0.0.1 # 映射本地IP段
local_port = 8888 # 映射本地端口
custom_domains = xx.xx.xxx.xx # 远程访问域名
remotr_port = 6001 # 远程访问的http端口

保存好这个配置后,运行frp

1
./frpc -c frpc.ini

这样就大功告成了!

通过游览器访问服务端的7500端口可以看到以下界面:

p2-frp管理面板

看到 online 状态后,我们可以通过 http 从公网IP的 6001端口 访问到本地计算机的 8888端口

【附加】

如果要使用 Jupyter Notebook ,具体可以百度 “Jupyter Notebook如何允许远程访问”,其实就是在 jupyter_notebook_config.py 配置文件最后加上以下内容:

1
2
3
c.NotebookApp.allow_remote_access = True
c.NotebookApp.open_browser = False
c.NotebookApp.ip='*'

最后再设置下 Jupyter Notebook 的登录密码即可。