参考博客:
Tinc 笔记 · 某 Lolicon 的自白 (sgdylan.com)
Tinc on OpenWrt 组网 | Neo's Blog (whosneo.com)
环境介绍:
现在有两个路由器,分别为openwrtA和openwrtB,两台路由器通过WAN口连接,openwrtA的WAN口eth1的IP为192.168.18.198,LAN口br-lan的IP为192.168.1.1,并且openwrtA的内网有一台PC机,分配的IP为192.168.1.246,openwrtB的WAN口eth1的IP为192.168.18.188,LAN口br-lan的IP为10.30.10.1,openwrtB的内网也有一台PC机,分配的IP为10.30.10.175,现在我们的目的是让两台内网PC机能互相ping通
1.先在openwrt的界面上把tinc和bird安装好,两台路由器都要安装
2.先让两台路由器之间的tinc能通
配置openwrtA的tinc
首先需要定义一个网络名称,这里使用 ELFNET(也可以是别的名字)
在 /etc/tinc/
目录中新建文件夹,名字为网络名称,即创建 /etc/tinc/
ELFNET/
目录
在此目录下创建 tinc.conf tinc-up tinc-down
文件和 hosts
文件夹。
tinc.conf
Name = ElfA #openwrtA的名称
AddressFamily = ipv4
Interface = tinc
Port = 1800 #tinc走的端口
PingInterval = 10
TCPOnly = yes
Mode = switch #使用交换机模式
tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip address add 10.10.10.1/24 dev $INTERFACE
ip route add 10.10.10.0/24 dev $INTERFACE
tinc-down
#!/bin/sh
ifconfig $INTERFACE down
hosts
文件夹中先创建好本机的文件,名称需要与上方 tinc.conf
中第一行的配置保持一致,即文件 ElfA:
Address = 192.168.18.198 #添加服务器公网IP或域名,openwrtA的WAN口IP:192.168.18.198
Port = 1800 #填写端口号
创建密钥
接下来为 ELFNET
(前面我们自己定义的网络名称)创建密钥信息,在询问保存位置时直接回车使用默认位置即可:
tinc -n ELFNET generate-rsa-keys
tinc -n ELFNET generate-ed25519-keys
为脚本赋予权限
chmod +x tinc-up
chmod +x tinc-down
此时路由器 openwrtA 的 /etc/tinc/ELFNET/
目录下的情况为:
├── ed25519_key.priv
├── hosts/
│ └── ELFA
├── rsa_key.priv
├── tinc-down
├── tinc-up
└── tinc.conf
编辑 /etc/config/tinc
文件:
config tinc-net ELFNET
option enabled 1
option Name ELFA
config tinc-host ELFA
option enabled 1
option net ELFNET
执行/etc/init.d/tinc start 来启用tinc
配置openwrtB的tinc
首先需要定义一个网络名称,这里还是使用 ELFNET
。
按照openwrtA的步骤创建文件和目录
tinc.conf
Name=ElfB
BindToAddress = * 1800ConnectTo = ElfA
Interface = tinc
TCPOnly = yes
Mode = switch
tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip address add 10.10.10.2/24 dev $INTERFACE
ip route add 10.10.10.0/24 dev $INTERFACE
tinc-down
#!/bin/sh
ifconfig $INTERFACE down
hosts
文件夹中先创建好本机的文件,名称需要与上方 tinc.conf
中第一行的配置保持一致,即文件 ElfB:
Address = 192.168.18.188 #添加服务器公网IP或域名,openwrtB的wan口IP:192.168.18.188
Port = 1800 #填写端口号
创建密钥
接下来为 ELFNET
(前面我们自己定义的网络名称)创建密钥信息,在询问保存位置时直接回车使用默认位置即可:
tinc -n ELFNET generate-rsa-keys
tinc -n ELFNET generate-ed25519-keys
为脚本赋予权限
chmod +x tinc-up
chmod +x tinc-down
此时路由器 openwrtB 的 /etc/tinc/ELFNET/
目录下的情况为:
├── ed25519_key.priv
├── hosts/
│ └── ELFB
├── rsa_key.priv
├── tinc-down
├── tinc-up
└── tinc.conf
编辑 /etc/config/tinc
文件:
config tinc-net ELFNET
option enabled 1
option Name ELFB
config tinc-host ELFB
option enabled 1
option net ELFNET
执行/etc/init.d/tinc start 来启用tinc
交换密钥
需要将openwrtA上的/etc/tinc/ELFNET/hosts/ELFA文件复制到openwrtB的/etc/tinc/ELFNET/hosts的目录下,同理,需要吧openwrtB上的/etc/tinc/ELFNET/hosts/ELFB文件复制到openwrtA的/etc/tinc/ELFNET/hosts的目录下
我这边由于WAN口的IP都在一个局域网,所以可以把WAN口流量全部放开,然后采用scp的方式来交换
此时两个路由器的 /etc/tinc/ELFNET/目录下的情况为:
├── ed25519_key.priv
├── hosts/
│ └── ELFA
│ └── ELFB
├── rsa_key.priv
├── tinc-down
├── tinc-up
└── tinc.conf
接下来要去openwrtA和openwrtB的防火墙配置,让tinc的数据能送达到br-lan口
两端 openwrt 均做同样的操作:在 Network – FireWall – Zones 中,点击Add新增一个区域,在General Settings中,命名为 vpn,input、output、forward 均设置为接受,Allow forward to destination zones和 Allow forward from source zones 均勾选上 lan,在 Advanced Settings中,Covered devices(涵盖的设备 )勾选上 tinc,配置完以后长这样
两边的openwrt接下来还要做设置,让到达1800端口的数据能从wan口进来,在 Network – FireWall – Traffic Rules中,点击Add,填写信息如下
在openwrtA上ping openwrtB的tinc的IP,发现已经通了,但是我们会发现两个内网PC还是无法ping通,也就是在openwrtB的内网IP为10.30.10.175的PC机上,是无法ping通openwrtA的内网IP为192.168.1.246的PC机的
3.配置bird让内网能ping通
bird的下载如下,先看看下面这个博客,我们接下来需要修改bird的配置文件
openwrt通过bird配置OSPF动态路由_openwrt动态路由-CSDN博客v
openwrtA上的bird的配置,先vim /etc/bird4.conf
保存并重启bird,不知道怎么重启可以看看前面的博客
openwrtB如上配置,唯一点和openwrtA上的bird不一样的就是route id要改为自己tinc的IP也就是10.10.10.2
在openwrtA的IP为192.168.1.246的PC机上ping openwrtB的内网PC的IP地址,已经可以通了,需要注意如果PC机是windows系统需要关闭防火墙,因为防火墙会阻止ping命令,也会导致ping不通