基础使用
对于普通使用者,快速的搭建起一个能用的安全强度适合的 VPN 是最大的需求。因此,本章节主要讲解基本概念和实践操作。配置内核、编译源代码、甚至交叉编译、高级定制等内容请参考本教程的进阶部分。
预备知识
- 每个 tinc VPN 必须有个名称,一个 VPN 可以包括很多主机;
- 每台主机必须有个名称,同时需要运行 tinc,一台主机可以通过运行多个 tinc 实例来加入多个 tinc VPN;
- tinc 启动时接受参数来指定要启动的网络,并定位到对应的网络配置目录读取配置;
- 启动后,读取网络配置目录中的主配置文件 tinc.conf,执行启动脚本(tinc-up),然后 ConnectTo 指定的主机,同时接受其他主机对本机的 ConnetTo;
- tinc 通过读取主机描述文件来获得主机信息,当前主机和 ConnectTo 的目标主机上都必须有双方的主机描述文件;
- ConnectTo 成功(认证通过),则加入 tinc VPN;
- 当 tinc 结束的时候,执行关闭脚本(tinc-down);
tinc VPN 名称接受 a-z 0-9 _ 中的字符,主机名称也是一样。
组网步骤
搭建 tinc VPN 非常快捷,每台主机的设置仅需几步,所有主机重复这套步骤即可:
主要需要理解和掌握的是“配置和交换密钥”这部分。
如何配置和交换密钥
配置,就是在 tinc 主配置目录里,按照配置规范,建立好相应的子目录和相应的文件。
交换密钥,就是在网络配置目录中,包含通讯双方的主机描述文件。
tinc 的配置方式是通过一套目录和其中的文件(以下简称为主配置目录)来完成的,主配置目录中按规范存放一系列子目录和文件。主配置目录默认值为 /etc/tinc (Unix-like OS)或 C:\Program Files\tinc (Windows)。
主配置目录下,每个子目录是以该目录名为名称的 VPN 网络的配置目录(以下简称为 网络配置目录)。每个网络配置目录,指定了该网络的相关配置。tinc 实例启动时接受参数来指定要启动的网络,并定位到对应的网络配置目录读取配置。
每个网络配置目录中,有以下内容:
- tinc.conf
主配置文件,其中的内容指定了该网络下 tinc 的配置 。其中的 Name 说明本主机名称,ConnectTo 指定启动后要自动连接的主机(可以多个)。
- tinc-up、tinc-down
脚本文件,这两个脚本是在 tinc 启动和关闭该网络时被调用。一般在这个脚本中用 “ifconfig/ipconfig” 等命令来设置虚拟网卡的 IP、路由等网络设置。 如果是 Unix-like 系统,需要有运行权限,如果是 Windows 系统,则需要增加 “.bat”后缀,即 “tinc-up.bat” 和 “tinc-down.bat”。
- rsa_key.priv
RSA 私钥文件,存放本主机的 RSA 私钥,这个文件的内容注意保密;
- hosts 子目录
主机描述文件存放目录。其中的每一个文件描述了一台主机的信息,文件名与主机名保持一致。
这是我笔记本(notebook)上的主配置目录(注:某些系统可能会有点差异,但差不多,万变不离其宗):
/etc/tinc (主配置目录)
│
├── home_vpn (第一个 VPN 的网络配置目录,目录名和网络名保持一致。)
│ ├── hosts
│ │ ├── tinc_ali (主机 tinc_ali 的描述文件)
│ │ └── notebook (主机 notebook 的描述文件)
│ ├── rsa_key.priv (本主机的 RSA 私钥)
│ ├── tinc.conf (tinc 主配置文件)
│ ├── tinc-down (当关闭 home_vpn 时,执行该脚本)
│ └── tinc-up (当启动 home_vpn 时,执行该脚本)
│
└── office_vpn (第二个 VPN 的网络配置目录,目录名和网络名保持一致。)
├── hosts
│ ├── server (主机 server 的描述文件)
│ └── notebook (主机 notebook 的描述文件)
├── rsa_key.priv (本主机的 RSA 私钥)
├── tinc.conf (tinc 主配置文件)
├── tinc-down (当关闭 office_vpn 时,执行该脚本)
└── tinc-up (当启动 office_vpn 时,执行该脚本)
在这个示例中,主机上共配置了两个 VPN,home_vpn(家庭用) 和 office_vpn(公司用)。这两个网络的配置都是在主配置目录下的一个子目录,子目录名称和网络名称一致。
以 home_vpn 为例:
tinc.conf
# 说明本主机名称
Name = notebook
# 指定启动时自动连接的主机。
# 可以使用多个ConnectTo来自动连接多个主机。
# 也可以没有,等待其他主机发起连接。
ConnectTo = tinc_ali
tinc-down
#!/bin/sh
# 关闭虚拟网卡
ifconfig $INTERFACE down
tinc-up
#!/bin/sh
# 启用虚拟网卡,并设置其 IP 为 10.0.0.101,子网掩码为 255.255.255.0
ifconfig $INTERFACE 10.0.0.100 netmask 255.255.255.0
hosts/tinc_ali
# tinc_ali 是一台公网机器,公网IP为 111.111.111.111
Address = 111.111.111.111
# tinc_ecs 的 VPN 内部 IP 为 10.0.0.1
# /32 说明其为一台机器而不是子网(普通用户直接用 /32 就可以了)
Subnet = 10.0.0.1/32
-----BEGIN RSA PUBLIC KEY-----
......
......
......
-----END RSA PUBLIC KEY-----
hosts/notebook
# notebook 是移动办公的笔记本,没有公网IP,所以没有 Address 这一行。
# notebook 的 VPN 内部 IP 为 10.0.0.101,这里要和 tinc-up 里面设定的一致。
# /32 说明其为一台机器而不是子网(普通用户直接用 /32 就可以了)
Subnet = 10.0.0.101/32
-----BEGIN RSA PUBLIC KEY-----
......
......
......
-----END RSA PUBLIC KEY-----
总结一下,其实就是本节开头的话:
- 所谓配置,就是按照上面的例子建立相应的目录,并在目录中建立相应的文件;
- 所谓交换密钥,就是确保通讯的双方主机有对方的公钥,而公钥存放在主机描述文件中。
文笔有限,可能看到这里您还是有点模糊。不要紧,有了基本的概念和知识,跟着我一起规划和搭建一次 tinc VPN。先不求甚解,依葫芦画瓢,实用优先,然后再求其索。