Tinc介绍
Tinc 是一个组建虚拟专用网络的工具,以 GNU 协议发布,通过隧道及加密技术在互联网上点与点之间创建专有网络。tinc 在网络层工作,因此无需对现有软件进行修改和配置。您可以使用 tinc 搭建专属的低延迟、高带宽、可扩展的 P2P 虚拟局域网。其数据通讯经过加密和压缩,能避免敏感数据和隐私的泄露。
选择的理由
- 开源,截止目前还在不断更新完善;
- 分布式网状路由,避免单点高负载和故障;
- 可运行多个实例来接入多个VPN;
- 通过虚拟网卡通讯,无需对现有应用软件进行修改和配置;
- 通讯支持 加密/认证/压缩,并支持参数选择;
- 支持常见的操作系统和网络拓扑,适用场景广泛;
- 支持P2P协议组网。
说明
本教程为实现Tinc 虚拟网内设备,能打洞成功的设备将实现直连,打洞失败的设备通过中转节点链接。
搭建教程
1)主节点
这里主节点选择的话必须是有公网IP的节点来进行搭建。
环境说明
系统:Ubuntu 20.04
虚拟内网IP:10.100.1.105
公网IP:1.1.1.1
虚拟网名称:hnvps
主节点名称: hnvps
1、安装Tinc
这里安装有两种方式
- 一种是直接使用apt安装
apt install tinc
- 本教程采用编译安装
这里安装的是最新的测试版本其他版本请到官网下载:https://tinc-vpn.org
# 安装依赖
apt install gcc cmake make zlib1g-dev liblzo2-dev openssl
curl https://cdn.nextrt.com/blog/tinc-1.1pre18.tar.gz -o /tmp/tinc.tar.gz
cd /tmp
tar -zxvf tinc.tar.gz
rm -rf tinc.tar.gz
mv tinc-1.1pre18 tinc
cd tinc
./configure
make
make install
# 建立配置文件储存目录
mkdir /usr/local/etc/tinc
mkdir -p /usr/local/var/run/
sudo ln -s /usr/local/etc/tinc /etc/tinc
2、配置TINC
准备事项
1、开启内核的 ip_foward 功能,如果没有开启请手动开启转发.
sysctl -a|grep ip_forward # 查看 ip_forward 转发是否开启 [ net.ipv4.ip_forward=1 ]
开启方法
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
2、启用 tun 设备
sudo modprobe tun
检查确认是否启用成功
ls /dev/net/tun
开始
这里假设我们要建立的虚拟网名称为hnvps
以下为配置完成的配置文件目录结构
/etc/tinc
└── hnvps
├── hosts
│ ├── hnvps
│ └── openwrt
├── rsa_key.priv
├── tinc.conf
├── tinc-down
└── tinc-up
文件说明
- tinc.conf 为 tincnet 的配置文件,
- tinc-up 为启动该网络时自动执行的脚本
- tinc-down 为关闭该网络时自动执行的脚本
- hosts 文件夹保存着各个节点(路由器)的信息。
# 建立配置文件储存目录
mkdir /etc/tinc/hnvps
mkdir /etc/tinc/hnvps/hosts
设置配置文件/etc/tinc/hnvps/tinc.conf
Name = hnvps
Interface = tinc
Autoconnect = yes
Compression=9
Cipher = aes-256-cbc
Digest = sha256
#绑定的端口
BindToAddress = * 10010
编写启动虚拟交换器脚本/etc/tinc/hnvps/tinc-up
:
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.100.1.105/24 dev $INTERFACE
ip route add 10.100.1.0/24 dev $INTERFACE
编写错误关闭的脚本/etc/tinc/hnvps/tinc-down
:
#!/bin/sh
ip route del 10.100.1.0/24 dev $INTERFACE
ip addr del 10.100.1.105/24 dev $INTERFACE
ip link set $INTERFACE down
赋予脚本权限:
chmod +x /etc/tinc/hnvps/tinc-*
编写主节点的详细信息/etc/tinc/hnvps/hosts/hnvps
:
# 主节点公网IP地址
Address = 1.1.1.1
# 主节点内网地址
Subnet = 10.100.1.105/32
Port = 10010
生成密钥信息
cd /etc/tinc/hnvps/hosts
执行下面命令后需要输入两次回车确认
tinc -n hnvps generate-rsa-keys
执行下面命令后需要输入两次回车确认
tinc -n hnvps generate-ed25519-keys
放行防火墙
ufw allow 10010
创建服务
echo '
# This is a mostly empty service, but allows commands like stop, start, reload
# to propagate to all tinc@ service instances.
[Unit]
Description=Tinc VPN
Documentation=info:tinc
Documentation=man:tinc(8) man:tinc.conf(5)
Documentation=http://tinc-vpn.org/docs/
After=network.target
Wants=network.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/usr/local/etc/tinc
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/tinc.service
echo '
[Unit]
Description=Tinc net %i
Documentation=info:tinc
Documentation=man:tinc(8) man:tinc.conf(5)
Documentation=http://tinc-vpn.org/docs/
PartOf=tinc.service
ReloadPropagatedFrom=tinc.service
[Service]
Type=simple
WorkingDirectory=/usr/local/etc/tinc/%i
ExecStart=/usr/local/sbin/tincd -n %i -D
ExecReload=/usr/local/sbin/tincd -n %i reload
KillMode=mixed
Restart=on-failure
RestartSec=5
TimeoutStopSec=5
[Install]
WantedBy=tinc.service' > /lib/systemd/system/tinc@.service
# 刷新服务
sudo systemctl unmask tinc
2) 子节点安装
环境:Openwrt 21.02
网络:10.0.0.0/24
内网IP:10.0.0.1
虚拟网络IP: 10.100.1.1
虚拟网络名:openwrt
由于部分固件并没有Tinc 需要自己手工安装
- 方法一、
opkg update
opkg install tinc
安装过程与主节点基本一致
开始(已安装tinc):
1、建立配置文件夹
mkdir -p /etc/tinc/openwrt/hosts/
1、配置/etc/tinc/openwrt/tinc.conf
Name = openwrt
Interface = tinc
#Mode = switch
Autoconnect = yes
Compression=9
Cipher = aes-256-cbc
Digest = sha256
BindToAddress = * 10010
Device = /dev/net/tun
2、配置/etc/tinc/openwrt/tinc-up
:
这里有区别的是,我想让虚拟网内机器能访问到Openwrt 路由网段10.0.0.0/24
内网资源,所以这里
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.100.1.1/32 dev $INTERFACE
ip route add 10.100.1.0/24 dev $INTERFACE
iptables -A FORWARD -o "${INTERFACE}" -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i "${INTERFACE}" -j ACCEPT
iptables -t nat -A POSTROUTING -s "10.100.1.0"/"255.255.255.0" ! -o "${INTERFACE}" -j MASQUERADE
3、配置/etc/tinc/openwrt/tinc-down
:
#!/bin/sh
ip route del 10.100.1.0/24 dev $INTERFACE
ip addr del 10.100.1.1/32 dev $INTERFACE
iptables -D FORWARD -o "${INTERFACE}" -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -D FORWARD -i "${INTERFACE}" -j ACCEPT
iptables -t nat -D POSTROUTING -s "10.100.1.0"/"255.255.255.0" ! -o "${INTERFACE}" -j MASQUERADE
ip link set $INTERFACE down
4、配置节点信息/etc/tinc/openwrt/hosts/openwrt
:
# 分配给OPENWRT的虚拟LANIP
Subnet=10.100.1.1/32
# 路由器所在的网段
Subnet=10.0.0.0/24
Port = 10010
5、赋予脚本权限:
chmod +x /etc/tinc/openwrt/tinc-*
6、接下来创建密钥信息,在询问保存位置时直接回车使用默认位置即可:
tinc -n openwrt generate-rsa-keys
tinc -n openwrt generate-ed25519-keys
7、复制主节点中的/etc/tinc/hnvps/hosts/hnvps
到openwrt 路由器节点的/etc/tinc/openwrt/hosts
目录下。复制路由器的/etc/tinc/openwrt/hosts/openwrt
到主节点的/etc/tinc/hnvps/hosts/
目录下 此时路由器openwrt 的 /etc/tinc/openwrt/
目录下的情况为:
├── ed25519_key.priv
├── hosts/
│ └── openwrt
│ └── hnvps
├── rsa_key.priv
├── tinc-down
├── tinc-up
└── tinc.conf
最后需要编辑 /etc/config/tinc 文件:
config tinc-net openwrt
option enabled 1
option Name openwrt
config tinc-host openwrt
option enabled 1
option net openwrt
启动服务
/etc/init.d/tinc start
0