Ubuntu安装Tinc并设置基本VPN
如何在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服务器上对其进行了测试