Ubuntu安装Tinc并设置基本VPN

时间:2020-01-09 10:45:33  来源:igfitidea点击:

如何在Ubuntu Linux 18.04/20.04 LTS服务器上安装Tinc并设置基本VPN?

tinc是一个免费的开放源代码服务器,用于创建虚拟专用网(VPN)。
一个Linux/Unix守护程序可以处理多个连接,因此您可以创建整个VPN。

tinc使用的LibreSSL或者OpenSSL加密流量并对其进行保护。
此外,自动全网状路由可确保流量直接发送到目的地,而无需经过中间跃点。
只要VPN中的一个节点允许公共/动态IP地址上的传入连接,NAT遍历就可以使Ubuntu防火墙变得更友好。
本教程说明如何在Ubuntu 18.04或者20.04 LTS服务器上设置Tinc Mesh VPN。

如何在Ubuntu上安装Tinc并设置基本VPN

我们的示例设置如下:

  • serverA:我们的Web服务器,带有公共IPv4/IPv6和eth1,带有私有IP地址。在此服务器上运行的所有应用程序都将通过基于Tinc的称为vpn0(IP:172.16.1.1/32)的VPN接口连接到serverB。我们将加密所有流量。
  • serverB:我们的数据库服务器,带有公用IP4/IPv6和专用IP地址。同样,我们的数据库将仅在名为vpn0(IP:172.16.1.2/32)的VPN接口上侦听,并丢弃所有使用ufw来自任何其他接口的流量。

Ubuntu使用apt-get命令/apt命令安装Tinc

在serverA和serverB上执行以下命令:

sudo apt update
sudo apt upgrade
sudo apt install tinc

在Ubuntu 18.04/20.04 LTS服务器上使用Tinc安装VPN

创建目录和配置文件

执行以下mkdir命令:

sudo mkdir -vp /etc/tinc/vpn0/hosts/
mkdir: created directory '/etc/tinc/vpn0'
mkdir: created directory '/etc/tinc/vpn0/hosts/'

更新/etc/hosts文件

编辑/etc/hosts,运行:

sudo vi /etc/hosts

使用实际IP地址如下追加/编辑:

## eth1 ip address
192.168.192.30	node_01
192.168.115.155	node_02
## tinc ip address ##
172.16.1.1 vpn1
172.16.1.2 vpn2

Tinc配置服务器

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

创建配置文件

使用nano命令/vim命令,如下所示:

sudo vim /etc/tinc/vpn0/tinc.conf

根据您的设置追加以下内容:

Name = node_01
Device = /dev/net/tun
## private ip of eth1 ##
BindToAddress = 192.168.192.30
AddressFamily = ipv4

制作公钥和私钥

执行以下tincd命令:

sudo tincd -n vpn0 -K4096

配置VPN IP地址

运行以下命令以配置tinc VPN IP地址和端口号:

sudo vi /etc/tinc/vpn0/hosts/node_01

如下更新:

Address = 192.168.192.30
Subnet = 172.16.1.1/32
Port = 655

-----BEGIN RSA PUBLIC KEY----
MIICCg............................................RQkc
.....
...
..
0ugK5dcFFJyO//.................................ws2zc1

保存并关闭文件。

使VPN网络接口控制上下脚本

创建一个Tinc-up Shell脚本:

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

追加以下代码:

#!/bin/sh
#
# Must use IP 172.16.1.1, which is setup in /etc/tinc/vpn0/hosts/node_01
#
/sbin/ip link set $INTERFACE up
/sbin/ip addr add  172.16.1.1/32 dev $INTERFACE
/sbin/ip route add 172.16.1.0/24 dev $INTERFACE

接下来,创建一个tinc-down脚本:

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

追加以下脚本内容:

#!/bin/sh
#
# See /etc/tinc/vpn0/hosts/node_01 for IP config 
#
/sbin/ip route del 172.16.1.0/24 dev $INTERFACE
/sbin/ip addr del 172.16.1.1/32 dev $INTERFACE
/sbin/ip link set $INTERFACE down

有关更多信息,请参见ip命令文档。
使用chmod命令设置可执行权限:

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

Ubuntu Linux服务器上的tincd防火墙配置

执行以下ufw命令以从serverB打开tcp/udp端口655:

sudo ufw allow from 192.168.115.155 to port 655 proto tcp comment 'Open TCP port 655 for serverA'
sudo ufw allow from 192.168.115.155 to port 655 proto udp comment 'Open UDP port 655 for serverB'

确保我们允许使用vpn0隧道在两个IP地址集之间进行vpn通信,如下所示:

sudo ufw allow from 172.16.1.2 to 172.16.1.1 comment 'Allow other vpn node to talk serverA fully'

serverB Ubuntu Tinc配置

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

步骤1创建配置文件

执行以下命令:

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

根据您的设置追加以下内容:

Name = node_02
Device = /dev/net/tun
## Ubuntu server name ##
ConnectTo = node_01  
BindToAddress = 192.168.115.155
AddressFamily = ipv4

第2步创建公钥和私钥

sudo tincd -n vpn0 -K4096

输出示例:

Generating 4096 bits keys:
....................++++ p
......................................................................++++ 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/node_02]:

步骤3设置vpn0的IP地址

编辑配置文件:

sudo vi /etc/tinc/vpn0/hosts/node_02

添加以下IP地址和端口号:

Subnet = 172.16.1.2/32
Port = 655

-----BEGIN RSA PUBLIC KEY----
MIICC..........................................................0
...
..
....
9z............................................................==
-----END RSA PUBLIC KEY----

步骤4创建网络接口控制脚本

创建一个补全脚本:

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

vpn0接口联机时,追加以下shell程序脚本以设置IP和路由:

#!/bin/sh
#
# Must use IP 172.16.1.2, which is setup in /etc/tinc/vpn0/hosts/node_02
#
/sbin/ip link set $INTERFACE up
/sbin/ip addr add  172.16.1.2/32 dev $INTERFACE
/sbin/ip route add 172.16.1.0/24 dev $INTERFACE

创建一个下调脚本:

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

使用ip命令追加以下shell脚本内容:

#!/bin/sh
#
# Remove IP and routing. IP must be from /etc/tinc/vpn0/hosts/node_02
# 
/sbin/ip route del 172.16.1.0/24 dev $INTERFACE
/sbin/ip addr del 172.16.1.2/32 dev $INTERFACE
/sbin/ip link set $INTERFACE down

设置可执行权限。
换句话说,使用以下chmod命令:

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

输出示例:

mode of '/etc/tinc/vpn0/tinc-up' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/etc/tinc/vpn0/tinc-down' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)

步骤5更新防火墙规则

使用bash进行循环以打开TCP/UDP端口:

for p in tcp udp
do
sudo ufw allow from 192.168.192.30 to port 655 proto $p comment 'Open $p port 655 for serverB'
done

允许两个IP地址之间的完整VPN通信:

sudo ufw allow from 172.16.1.1 to 172.16.1.2 comment 'Allow other vpn node to talk serverB fully'

将主机文件复制到其他主机

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

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

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

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

启用并启动Tinc服务(在serverA和serverB上均执行)

执行systemctl命令以启用tinc @ vpn0来启用各个网络:

sudo systemctl enable tinc@vpn0

启动tinc:

sudo systemctl start tinc@vpn0

停止或者重新启动tinc:

sudo systemctl stop tinc@vpn0
sudo systemctl restart tinc@vpn0

查找tinc的状态:

sudo systemctl status tinc@vpn0

使用ps命令/pgrep命令和netstat命令/ss命令进行验证

ps aux | grep tincd
ss -tulpn

使用ping命令确保您可以访问每个节点:

ping vpn1
ping vpn2
ping 172.16.1.1
ping 172.16.1.2

我们设置了Tinc,一个对等VPN,并在Ubuntu服务器上对其进行了测试