如何在Ubuntu Linux 16.04 LTS上安装Tinc VPN

时间:2020-01-09 10:39:26  来源:igfitidea点击:

如何保护在设计上不安全的专用网络之间流动的流量,并且由于设置复杂而不想使用OpenVPN。
如何在Ubuntu Linux 16.04 LTS服务器上安装和设置Tinc VPN服务器并保护通过VPN的流量?

tinc是虚拟专用网络(VPN)服务器,使用隧道和加密在Internet上的主机或专用不安全LAN上的主机之间创建安全的专用网络。

tinc是一个免费软件,并根据GNU通用公共许可版本2或更高版本获得许可。

tinc具有以下功能:

  • 易于设置
  • 加密,认证和压缩
  • 自动全网格路由
  • NAT遍历
  • 轻松扩展您的VPN
  • 桥接以太网段的能力
  • 在许多操作系统上运行并支持IPv6,包括Linux,FreeBSD,OpenBSD,NetBSD,OS X,Solaris,Windows 2000,XP,Vista和Windows 7/8/10。

本教程向您展示如何在Ubuntu Linux 16.04 LTS服务器上安装tinc,以及如何在通过Internet连接或在云设置中运行的专用LAN连接的两个节点之间创建安全的VPN。

如何在Ubuntu上安装Tinc VPN

我们使用以下apt-get命令或apt命令将tinc安装在serverA和serverB上:

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install tinc

输出示例:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  tinc
0 upgraded, 1 newly installed, 0 to remove and 7 not upgraded.
Need to get 165 kB of archives.
After this operation, 655 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu xenial/universe amd64 tinc amd64 1.0.26-1 [165 kB]
Fetched 165 kB in 1s (85.6 kB/s)     
Selecting previously unselected package tinc.
(Reading database ... 42846 files and directories currently installed.)
Preparing to unpack .../tinc_1.0.26-1_amd64.deb ...
Unpacking tinc (1.0.26-1) ...
Processing triggers for systemd (229-4ubuntu17) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for install-info (6.1.0.dfsg.1-5) ...
Setting up tinc (1.0.26-1) ...
Processing triggers for systemd (229-4ubuntu17) ...
Processing triggers for ureadahead (0.100.0-19) ...

在serverA上进行tinc配置

仅以root用户身份在serverA上执行以下命令。

步骤1:在serverA上创建目录

执行以下mkdir命令:

$ sudo mkdir -p /etc/tinc/vpn0/hosts/

步骤2:在serverA上创建配置文件

输入以下vi命令:

$ sudo vi /etc/tinc/vpn0/tinc.conf

追加以下内容:

Name = serverA
Device = /dev/net/tun
BindToAddress = 192.168.4.5
AddressFamily = ipv4

步骤3:为serverA创建公用密钥和专用密钥

$ sudo tincd -n vpn0 -K4096

输出示例:

Generating 4096 bits keys:
...........................................................................
.........................................................................++ q
Done.
Please enter a file to save private RSA key to [/etc/tinc/vpn0/rsa_key.priv]: 
Please enter a file to save public RSA key to [/etc/tinc/vpn0/hosts/serverA]:

步骤4:将IP地址设置为在serverA上创建的主机文件

$ sudo vi /etc/tinc/vpn0/hosts/serverA

在文件顶部添加以下内容:

Address = 192.168.4.5
Subnet = 172.16.1.1/32

-----BEGIN RSA PUBLIC KEY----
.....
...
your random key here
....
-----END RSA PUBLIC KEY----

步骤5:在serverA上创建网络接口控制脚本

创建一个补全脚本:

$ sudo vi /etc/tinc/vpn0/tinc-up

追加以下内容:

#!/bin/sh
#
# Must use IP 172.16.1.1, which is setup in /etc/tinc/vpn0/hosts/serverA
#
/sbin/ifconfig $INTERFACE 172.16.1.1 netmask 255.255.255.0

创建一个下调脚本:

$ sudo vi /etc/tinc/vpn0/tinc-down

追加以下内容:

#!/bin/sh
/sbin/ifconfig $INTERFACE down

最后使用chmod命令设置可执行权限:

$ sudo chmod -v +x /etc/tinc/vpn0/tinc-{up,down}

第6步:更新serverA上的防火墙规则

执行以下ufw命令以打开端口tcp 655:

$ sudo ufw allow from 192.168.4.6 to 192.168.4.5 port 655 proto tcp comment 'Allow serverA tincd to talk vpn client'

执行以下ufw命令以打开端口udp 655:

$ sudo ufw allow from 192.168.4.6 to 192.168.4.5 port 655 proto udp comment 'Allow serverA tincd to talk vpn client'

您必须允许使用vpn0隧道在两个IP地址集之间进行vpn通信:

$ sudo ufw allow from 172.16.1.2 to 172.16.1.1 comment 'Allow serverB to talk serverA fully'

在serverB上进行tinc配置

仅以root用户身份在serverA上执行以下命令。

步骤1:在serverB上创建目录

执行以下mkdir命令:

$ sudo mkdir -p /etc/tinc/vpn0/hosts/

步骤2:在serverB上创建配置文件

输入以下vi命令:

$ sudo vi /etc/tinc/vpn0/tinc.conf

追加以下内容:

Name = serverB
Device = /dev/net/tun
ConnectTo = serverA
BindToAddress = 192.168.4.6
AddressFamily = ipv4

步骤3:为serverB创建公钥和私钥

$ sudo tincd -n vpn0 -K4096

输出示例:

Generating 4096 bits keys:
...........................................................................
.........................................................................++ q
Done.
Please enter a file to save private RSA key to [/etc/tinc/vpn0/rsa_key.priv]: 
Please enter a file to save public RSA key to [/etc/tinc/vpn0/hosts/serverB]:

步骤4:将IP地址设置为在serverB上创建的主机文件

$ sudo vi /etc/tinc/vpn0/hosts/serverB

在文件顶部添加以下内容:

Subnet = 172.16.1.2/32

-----BEGIN RSA PUBLIC KEY----
.....
...
your random key here
....
-----END RSA PUBLIC KEY----

第5步:在serverB上创建网络接口控制脚本

创建一个补全脚本:

$ sudo vi /etc/tinc/vpn0/tinc-up

追加以下内容:

#!/bin/sh
#
# Must use IP 172.16.1.2, which is setup in /etc/tinc/vpn0/hosts/serverB
#
/sbin/ifconfig $INTERFACE 172.16.1.2 netmask 255.255.255.0

创建一个下调脚本:

$ sudo vi /etc/tinc/vpn0/tinc-down

追加以下内容:

#!/bin/sh
/sbin/ifconfig $INTERFACE down

最后,使用chmod命令设置可执行权限:

$ sudo chmod -v +x /etc/tinc/vpn0/tinc-{up,down}

第6步:更新serverB上的防火墙规则

执行以下ufw命令以打开端口tcp 655:

$ sudo ufw allow from 192.168.4.5 to 192.168.4.6 port 655 proto tcp comment 'Allow serverB tincd to talk to serverA'

执行以下ufw命令以打开端口udp 655:

$ sudo ufw allow from 192.168.4.5 to 192.168.4.6 port 655 proto udp comment 'Allow serverB tincd to talk to serverA'

您必须允许使用vpn0隧道在两个IP地址集之间进行vpn通信:

$ sudo ufw allow from 172.16.1.1 to 172.16.1.2 comment 'Allow serverA to talk serverB fully'

合并的步骤7:您必须将主机文件复制到其他主机

您必须将/etc/tinc/vpn0/hosts/serverA复制到serverB。
使用scp命令(在serverA上执行命令):

$ scp /etc/tinc/vpn0/hosts/serverA Hyman@serverB:/tmp/
$ ssh -t Hyman@serverB sudo mv -v /tmp/serverA /etc/tinc/vpn0/hosts/

您必须将/etc/tinc/vpn0/hosts/serverB复制到serverA。
使用scp命令(在serverB上执行命令):

$ scp /etc/tinc/vpn0/hosts/serverB Hyman@serverA:~/
$ ssh -t Hyman@serverA sudo mv -v /tmp/serverB /etc/tinc/vpn0/hosts/

合并的步骤8:启用并启动tinc服务(在serverA和serverB上均执行)

执行以下命令以使用sudo命令将vpn0服务追加到/etc/tinc/nets.boot文件:

$ echo 'vpn0' | sudo tee -a /etc/tinc/nets.boot

启用它:

$ sudo systemctl enable tinc

重新启动它:

$ sudo systemctl restart tinc

验证一下:

$ ps aux | grep tincd

输出示例:

root 2334 0.0 0.0 15724 2940 ? Ss 16:40 0:04 /usr/sbin/tincd -n vpn0

确保端口已打开:

$ netstat -tulpn | grep tincd

来自serverA的输出示例:

tcp   0  0 192.168.4.5:655   0.0.0.0:*   LISTEN  22334/tincd     
udp   0  0 192.168.4.5:655   0.0.0.0:*           22334/tincd

使用ping命令将ICMP ECHO_REQUEST发送到网络主机,以验证vpn是否正常工作:

$ ping 172.16.1.1
$ ping 172.16.1.2

现在,您可以修改sshd和mysqld守护程序/服务以侦听172.16.1.1或172.16.1.2,以仅接受来自VPN主机的流量。
例如,在serverA上编辑/etc/sshd/sshd_config以侦听LAN,VPN和公共IP地址:

# listen to LAN, VPN, and Public IP
ListenAddress 192.168.4.5
ListenAddress 172.16.1.1
ListenAddress 192.54.3.5

并重新加载sshd服务:

$ sudo systemctl reload ssh