evrardjp.tinc
Tinc
この役割は、tincをスターまたはリングトポロジーでインストールします。
グループ[tinc_nodes]に一覧されたノードは、役割を適用/インストールするためのノードの完全なリストです。
[tinc_spine_nodes]に属するノードは、すべてのノードが接続する「コア」ノードです。
[tinc_leaf_nodes]にいるノードは、スパインノードにのみ接続します。NATの背後にあるデバイスはその一例です。
すべての[tinc_nodes]が[tinc_spine_nodes]の一部であれば、より「リング状」のトポロジーになります。[tinc_spine_nodes]に1つのノードがあれば、より「スター状」のトポロジーになります。
要件
- 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: ルーター、スイッチ、またはハブ(詳細は 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が使用するデバイス(デフォルト:
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フレームワークに基づいており、以下を実行します:
- 役割の構文チェック
- 異なるOSでいくつかのコンテナを起動します(テスト専用です。プロダクションではTincのバージョンを混ぜません)
- 各コンテナにこの役割を適用
- 冪等性テストを実行(2回目の実行で予期しない変更がないことを確認)
- 準備された各ノードがVPN経由で他のノードにpingできることを確認
テストは、プルリクエストおよび日次のGitHubアクションで実行されます。さらに、ローカルマシンで実行することもできます。
テストを実行するために必要な依存関係:
手動でテストを実行する(Moleculeを使用)
スターとリングトポロジーの既存のテストを実行できます:
cd ansible-tinc
molecule test # これはリングシナリオのデフォルトテストを実行します
molecule test -s star
'molecule test'コマンドは完全なシナリオを実行します: 'create'、'converge'、'check idempotency'、'verify'、および 'destroy'のステップ。コンテナをすぐに破棄したくない場合やデバッグのためにアクセスが必要な場合、'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>
version
のサポートされている値はtox.ini
で確認できます。
現在、tincでテスト可能なシナリオはring
またはstar
です。
位置引数はmolecule test
コマンドに渡されます。
例えば、ansible-2.9用のリングトポロジーのテストを実行し、moleculeが環境を破棄しないようにするには:
tox -e ansible-2.9-ring -- --destroy=never
新しいOSで役割をテストする方法
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 の
molecule-notest
タグを使って1つのステップをスキップし、コンテナ作成中に/etc/hostsを変更します - molecule/default/molecule.yml の対応する指示に従ってください。
ライセンス
Apache2
著者情報
ジャン=フィリップ・エヴラール
ansible-galaxy install evrardjp.tinc