evrardjp.tinc
Tinc
该角色在星型或环型拓扑中安装tinc。
在组[tinc_nodes]中列出的节点是要应用/安装该角色的完整节点列表。
属于[tinc_spine_nodes]的节点是“核心”节点,所有节点都在此连接。
[tinc_leaf_nodes]中的节点仅连接到核心节点。处于NAT后面的设备就是这种情况的一个例子。
如果所有[tinc_nodes]都属于[tinc_spine_nodes],那么你将有一个更“环形”的拓扑。如果在[tinc_spine_nodes]中有一个节点,则你将有一个更“星形”的拓扑。
要求
- Ubuntu 18.04 / CentOS 7(或更高)/ OpenWRT
- 在CentOS及以上版本上,需要提前配置EPEL仓库。
要做到这一点,你可以运行以下命令:
yum install epel-release || dnf install epel-release
yum update || dnf update
角色变量
- tinc_key_size:生成的密钥大小(默认值:
4096
) - tinc_address_family可以是ipv4/ipv6/any(或未定义)
- tinc_mode可以是router、switch或hub。(请参见https://www.tinc-vpn.org/documentation/tinc.conf.5)(默认值:`router`)
- tinc_netname:tinc网络名称
- tinc_vpn_ip:分配给单个VPN端点的IP。使用主机变量设置。
- tinc_vpn_cidr:在tinc网络中使用的CIDR(默认值:
/24
,在路由模式下强制为/32)。 - tinc_vpn_interface:用于tinc的设备,以防有多个tun设备(默认值:
tun0
) - tinc_control_plane_bind_ip:tincd服务绑定的IP(默认值:
ansible_default_ipv4.address
)
清单中必须设置tinc_control_plane_bind_ip(针对核心)和/或tinc_vpn_ip(针对核心和边缘节点)。 请查看任务文件。
示例
路由模式,环形拓扑
(简要)清单:
[tinc_nodes:children]
tinc_spine_nodes
tinc_leaf_nodes
[tinc_spine_nodes]
node1 tinc_vpn_ip=10.10.0.11
node2 tinc_vpn_ip=10.10.0.12
node3 tinc_vpn_ip=10.10.0.13
[tinc_leaf_nodes]
node1
node2
node3
路由模式,星型拓扑
(详细)清单:
[tinc_nodes]
node1
node2
node3
[tinc_spine_nodes]
node1
[tinc_leaf_nodes]
node1
node2
node3
tinc_nodes
的组变量:
tinc_netname: mynetname
tinc_vpn_interface: tun0
核心节点node1
的主机变量:
tinc_control_plane_bind_ip: "{{ ansible_eth0.ipv4.address | default(ansible_default_ipv4.address) }}"
tinc_vpn_ip: 10.10.0.10
边缘节点node2
的主机变量:
tinc_vpn_ip: 10.10.0.11
边缘节点node3
的主机变量:
tinc_vpn_ip: 10.10.0.12
依赖关系
无
示例剧本
见https://raw.githubusercontent.com/evrardjp/ansible-tinc/master/molecule/default/converge.yml
不要忘记在清单中设置必要的变量(见上文)。
测试
测试基于Ansible Molecule框架,它:
- 检查角色语法
- 启动多个不同操作系统的容器(仅用于测试。我们在生产中不混合Tinc版本)
- 将该角色应用于每个容器
- 运行幂等性测试(确保第二次运行不会产生意外更改)
- 验证每个准备好的节点能够通过VPN ping其他节点
测试在PR和每日的github actions中运行。此外,你还可以在本地机器上执行它们。
运行测试所需的依赖项:
手动运行测试,使用molecule直接
你可以对星型和环型拓扑使用现有测试:
cd ansible-tinc
molecule test # 这将运行环形场景的默认测试
molecule test -s star
molecule test
命令执行完整的场景:'创建'、'收敛'、'检查幂等性'、'验证'和'销毁'步骤。通常你不希望容器立即被销毁,而需要访问它以进行调试。为此,可以用以下方式替换molecule test
:
molecule converge # 这将创建容器并应用角色
molecule verify # 运行描述在molecule/default/verify.yml中的测试
# 在这两个步骤之后,你将拥有活动的Docker容器
# 你可以使用常规命令'docker ps'、'docker exec'等访问它们
molecule destroy
手动运行测试,使用tox
tox是一个Python测试运行器。它将在虚拟环境中安装所有必要的Python依赖项(ansible、molecule[docker])。
要运行测试:
tox -e ansible-<version>-<tinc scenario>
请在tox.ini
中查看支持的version
值。
当前可测试的tinc场景为ring
或star
。
位置参数将传递给molecule test
命令。
例如,要为ansible-2.9运行一个测试,使用环形拓扑并防止molecule销毁环境:
tox -e ansible-2.9-ring -- --destroy=never
如何用新操作系统测试角色
在molecule/default/molecule.yml和molecule/star/molecule.yml中添加新映像,按照现有示例进行操作。这些文件除了变量scenario.name
和groups
外是相似的。以下几点可能会有所帮助:
- 代码
privileged: true
和command: /sbin/init
将启用systemd(如果容器支持的话)。请不要忘记,系统中的特权容器可能会带来风险。 - Docker镜像缺少一些标准软件,因此molecule/default/converge.yml会负责安装必要的依赖项。
- 根据https://github.com/ansible-community/molecule/issues/959,Docker不允许在容器内修改/etc/hosts。为了解决这一问题,我们在[tasks/tinc_configure.yml](tasks/tinc_configure.yml)中跳过一个步骤,并在容器创建期间修改/etc/hosts - 根据molecule/default/molecule.yml中的相应指令进行。
许可证
Apache2
作者信息
Jean-Philippe Evrard
ansible-galaxy install evrardjp.tinc