隧道技术的一点微小经验

因为校园网没有公网 IP,为了能够从外网远程连接进我实验室的电脑,就简单部署了一条路由器到阿里云华东节点的隧道,然后用 nginx 做了个转发。

这里主要记录一下,点对点隧道的布置,路由表,自启动等一些事情。为了方便,我使用了点对点 tun 隧道,静态密钥。

服务器端

服务器端用了一台阿里云的 Debian 8,apt 安装 openvpn 即可,先用 openvpn --genkey --secret static.key 命令搞个静态密钥出来,然后写配置文件。配置文件直接丢在这好了:

dev tun

# Set local/remote interface address
ifconfig 172.16.0.2 172.16.0.1

# Keepalive every 2 sec, reconnect if no answer in 16 sec.
keepalive 2 16

# Listen port
port 1194

# Preshare key
secret static-226.key

# Verbosity level.
# 0 -- quiet except for fatal errors.
# 1 -- mostly quiet, but display non-fatal network errors.
# 3 -- medium output, good for normal operation.
# 9 -- verbose, good for troubleshooting
verb 3

# Add route
route 10.0.0.0 255.0.0.0

然后启动就好了,与 tap 不同,tun 工作在三层,因此不需要网桥,需要加一条路由表。至于启动方式,可以写个命令行(不优雅),我是希望用 systemd 的方式,因此又研究了一下。

在 systemd 的情况下,openvpn 把每个脚本做成了一个 service,因此我们把脚本和密钥丢进 /etc/openvpn/server/ 下面,测试过之后,运行 systemctl daemon-reload 来重载一下 systemd,随后用 systemctl start openvpn-server@YOUR_SERVER 来启动该链接即可。

现在 openvpn 就比较优雅了,只需要在 nginx 上把 3389 端口转发一下就可以了,其实用 iptables 也可以,主要是我懒。另外,iptables 不能从 v4 转发到 v6,nginx 可以,所以还是用了这玩意。

路由器端

路由器端比较简单,用 luci-app-openvpn 这个包就可以搞定,然后点点鼠标就可以了。不过有些地方有坑,比如 client mode 就不能点,这个是说 tls 加密的 client mode,我们用的密钥,就不应该点这个。还有就是,ifconfig 要反过来,别忘了。

SSH 登陆两边 ping 一波,如果通了,就可以了。然后到 Interface 界面中,加一个接口,物理接口选 tun0,类型选择 unmanaged 即可,然后防火墙区域选到 LAN 即可(暂不考虑安全性)。现在阿里云这台机器就可以访问学校内网了。

Etc

其实还有个问题,因为安全问题,电脑平时需要断电,怎么远程开机。说来也简单,主板 BIOS 有个选项可以设置 Power Back 的行为,然后配合小米 WiFi 插座就可以了。注意,一定要找带功率计的版本,要不然点了关机不敢关断插座岂不是蠢爆了?

这一套下来,感觉,效果还不错?

发表评论