使用DDNS和内网穿透搭建公网服务

阅读本文可以没有网络知识背景的人理解DDNS与内网穿透,以极低的成本搭建个人服务。

什么是DDNS

DDNS(Dynamic Domain Name Server,动态域名服务)是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。 ——百度百科

通俗来说,互联网是依靠IP地址进行路由的,好比快递员根据家庭住址投送包裹。然而这种IP地址的数量是有限的,价格也是高昂的。我们的个人设备通常没有这种公网IP地址,而是仅仅在使用时被分配一个临时的公网IP地址,如果不连接时就会被收回。这样做可以节省很多IP地址资源。

但这样就遇到了一个问题:如果我想为他人提供服务,我的设备没有一个固定的IP地址,就好比一我经常搬家,别人总是想找我却发现我已经不在这儿住了。

DDNS就可以解决这个问题:我只要找一个不搬家的人,我每次搬家到告诉他我们搬到哪了,大家只要找他就能找到我。

这样,我们这种经常搬家的人也仿佛拥有了不动产,也能稳定为别人提供服务了。(就是别人找你会费劲一些,多跑一些路)

什么是内网穿透

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备的相对位置介绍内网穿透方法。 ——百度百科

想理解内网穿透还得需要先知道NAT——网络地址转换。

真实的网络更加复杂,我们的设备可能连一个临时的公网IP都没有,而是隐藏在一层一层的内部网络之中,通过层层路由器接入互联网,这些路由器就是通过NAT仅用一个IP地址就能为所有内部网络设备提供互联网接入。这好比我们都住在不同的小区,而且还可能在这个小区里来回来搬家…

这时候要想为别人提供服务怎么办呢?(非常有服务精神了)

内网穿透就是干这个的:我只要找一个不搬家的人,我每次搬家都告诉他我在这个小区、进小区以后这么走,大家又可以通过他找到我了。

所以本质上DDNS和内网穿透都在干一件事,但是记录的东西有所不同,前者记录的是公网地址,后者记录的是公网地址和端口号等。实际情况更加复杂一些,这里不做展开,只要理解大致原理,就能利用这些做想做的事了。

有什么用

说了这么多,终于可以开始“以极低的成本搭建个人服务”了

简单来说,你可以

  • 随时远程启动和连接你的主机(远程启动需要路由器支持)
  • 在主机上搭建一个私有云盘、博客、网站等任何你可以自己部署的服务,在外随时访问

我就为实验室的服务器和路由器都做了内网穿透,使得这些原本只能在校园网或实验室里才能访问的服务,让大家疫情期间在家也能够访问。在疫情期间,实验室的网络服务也在不断升级,为工作学习提供便利。

比较推荐的花生壳,注册后可以几乎免费拿到两个端口映射,而且还提供设置访问密码的功能。但是免费用户一个月只有1个G的流量,应付网页应用足够了,云盘放点小文件也可以,大文件传输就免了。实际上我还从没用完过这免费的一个G。

Overleaf-在线Latex编辑器部署

前言

Latex是科研工作中最常用的文档排版系统,然而我个人觉得很多Latex编辑器没有做到开箱即用,最开始使用Latex的时候我经常一编译就是一堆bug,这让我一个计算机专业热爱折腾的人都有些望而却步,即使别人告诉我Latex的文献管理是多么方便。造成很长一段时间,我都处于:Latex真好,但我选Markdown。

后来,我遇到了Overleaf。

Overleaf是开源的在线Latex编辑器软件,个人用户可以在Overleaf官网注册并免费使用Overleaf,Overleaf官网还具有Review等团队协作功能。但是Overleaf官网在国内的访问速度不佳,科学上网后速度才满足日常需求。

因此,对于科研团队来说,在自己的服务器上部署Overleaf,从此为整个团队都省去了安装Latex各种包的繁琐,多么幸福的事。需要说明的事,目前开源的个人版本的Overleaf功能没有Overleaf官网齐全,也许还有些小bug,但是就我目前的使用来说,足够日常使用了。

安装

1. 安装Docker

确保服务器已经安装了Docker和docker-compose。如果没有,可以通过以下命令安装。

1
2
sudo apt-get install docker-ce docker-ce-cli containerd.io
pip install docker-compose

查看版本,检查是否安装成功

1
2
docker --version
docker-compose --version

2. 安装Overleaf

通过docker安装Overleaf的开源版本sharelatex

1
docker pull sharelatex/sharelatex

3. 配置Overleaf

1
2
wget https://raw.githubusercontent.com/sharelatex/sharelatex/master/docker-compose.yml
sudo vim docker-compose.yml

需要修改的就是ports: - 80:80,一般80端口都被apache或nginx占用了,改用其他端口如:ports: - 5000:80
其他可根据需要修改,如挂载位置等。

4. 启动Overleaf

docker-compose.yml所在路径下执行

1
docker-compose up -d

5. 安装完整texlive

先进入docker容器,在docker中安装编译所需的完整的texlive

1
2
3
docker exec -it sharelatex bash
tlmgr update --self --all
tlmgr install scheme-full &

安装过程,十分漫长,总共需要安装近4000个包,应该就是要装一晚上的节奏,为了避免shell断掉加上 &,回车后可以看到安装过程。
如果过慢可以尝试换源:

1
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet/

再执行update和install。

6. 使用Overleaf

打开浏览器访问http://hostname:5000/launchpad,创建Admin账户,愉快的玩耍吧。

参考

[1] https://github.com/overleaf/overleaf/wiki/Quick-Start-Guide
[2] https://yxnchen.github.io/technique/Docker%E9%83%A8%E7%BD%B2ShareLaTeX%E5%B9%B6%E7%AE%80%E5%8D%95%E9%85%8D%E7%BD%AE%E4%B8%AD%E6%96%87%E7%8E%AF%E5%A2%83/#%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C

Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment