IPセット
最終検証日:
翻訳: 竹洞 陽一郎
IPセット(IP set)は、IPアドレスのグループを管理するための仕組みです。
IPアドレス、CIDR、ホスト、オートグループ、他のIPセットなど、ターゲットの集合をカプセル化できます。
Tailscaleは、IPセット内のすべての要素をIPアドレス範囲のリストに変換します。
ipset構文を使うと、tailnetポリシーファイル内でIPセットを作成し、ACLやグラントなどのアクセス制御ポリシーから参照できます。
IPセットの主な利点は、複数のネットワーク部分を1つのコレクションにグループ化できることです。
これにより、個々のIPアドレス、ホスト、サブネットではなく、そのコレクションに対してアクセス制御ポリシーを適用できます。
IPセットは、さまざまな用途に活用できます。例えば、次のようなことができます。
- サブネット、タグ、グループといった他のグルーピングとは独立して、tailnetの論理的な断面をターゲットにして管理する。
- アクセス制御ポリシーでサブネットをターゲットにしつつ、特定の一部のホストを除外する。
- オートグループをカスタマイズし、グローバルなExit Nodeアクセスから一部のプライベートまたはパブリックなサブネットを除外する。
- tailnetポリシーファイルを、より整理された構成にする。
制限事項
IPセットには、以下の制限があります。
- IPセットには、タグ、ユーザー、グループを含めることはできません。
- IPセットへの循環参照は使用できません。
- サポートされるオートグループは
autogroup:internetのみです。これは、IPアドレス範囲を参照するオートグループがautogroup:internetだけであるためです。他のオートグループは、タグ、ユーザー、動的なデバイスの集合など、サポートされていないターゲットを参照します。
構文
ipsetは、tailnetポリシーファイル内で1つ以上の名前付きipsetsを定義するオブジェクトです。
各名前付きipsetには、1つ以上のオペレーションが含まれ、それぞれがターゲットを追加または削除します。
次の例は、tailnetポリシーファイルでipsetを作成する際の基本構文を示しています。<name>はIPセットの名前、<target>はCIDR、IPアドレス、ホスト、オートグループ、またはIPセットです。
"ipsets": {
"ipset:<name>": [
"add <target>",
"remove <target>"
]
}
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
オペレーション
ipset構文は、addとremoveの2つのオペレーションをサポートします。各名前付きIPセットには、1つ以上のオペレーションを設定でき、順番に処理されます。
名前付きIPセットがaddオペレーションのみを使用する場合を除き、ターゲットの前にオペレーションの種類を含める必要があります。
| オペレーション | 説明 |
|---|---|
add |
名前付きIPセットにターゲットを追加します。 |
remove |
名前付きIPセットからターゲットを削除します。 |
ターゲット
ターゲットとは、名前付きIPセットに追加または削除する、CIDR、IPアドレス、ホスト、オートグループ、またはIPセットです。
名前付きIPセットがターゲットの追加のみを行う(IPアドレスを削除しない)場合を除き、各ターゲットの前にはオペレーション(addまたはremove)を付ける必要があります。
| ターゲット | 構文 | 例 |
|---|---|---|
| CIDR | <cidr> |
192.0.2.0/24、2001:db8::/32 |
| IPアドレス | <ip-address> |
192.0.2.33、2001:db8:: |
| IPアドレス範囲 | <ip-range-start>-<ip-range-end> |
192.0.2.50-192.0.2.100、2001:db8::5-2001:db8::9 |
| ホスト | host:<name> |
host:sql-server-1 |
| オートグループ | autogroup:internet |
autogroup:internet |
| IPセット | ipset:<name> |
ipset:prod |
ここでいうホストとは、tailnetポリシーファイルのhostsセクションを指し、MagicDNS名ではありません。
参照
名前付きIPセットは、ipset:<name>という形式(<name>はIPセットの名前)を使って、tailnetポリシーファイルの特定の箇所から参照できます。
tailnetポリシーファイルの以下のセクションでは、IPセットの参照をサポートしています。
例
以下の例は、IPセットの活用方法を示しています。
addオペレーションのみでIPセットを作成する。- 複数のサブネットを追加し、単一のIPアドレスを除外するIPセットを作成する。
- 別のIPセットを除外するIPセットを作成する。
- グラントでIPセットを参照する。
- ACLでIPセットを参照する。
autogroup:internetをカスタマイズする。
addオペレーションのみでIPセットを作成する
次のIPセットは、ターゲットを削除しません。そのため、オペレーションの種類を省略した簡略構文を使用できます(addが前提とされるため)。
"ipsets": {
"ipset:prod": ["192.0.2.0/24"],
"ipset:dev": [
"198.51.100.0/24",
"203.0.113.0/24",
"host:sql-server-1",
]
}
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
複数のサブネットを追加し、単一のIPアドレスを除外するIPセットを作成する
次の例は、複数のサブネットを含め、単一のIPアドレスを除外するIPセットの作成方法を示しています。
"ipsets": {
"ipset:prod": [
"add 192.0.2.0/24",
"add 2001:db8::/32",
"add 198.51.100.0/24",
"add 203.0.113.0/24",
"remove 192.0.2.33",
],
}
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
別のIPセットを除外するIPセットを作成する
次の例は、devIPセットとprodIPセットを作成します。prodIPセットは、devIPセットに含まれるものをすべて除外します。
"ipsets": {
"ipset:dev": ["host:sql-server-1"],
"ipset:prod": [
"add 192.0.2.0/24",
"add 198.51.100.0/24",
"remove ipset:dev",
]
}
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
グラントでIPセットを参照する
次の例は、devIPセットを参照するグラントの作成方法を示しています。
"grants": [
{
"src": ["group:devops"],
"dst": ["ipset:dev"],
"ip": ["80","443","22"]
},
{
"src": ["group:dev"],
"dst": ["ipset:dev"],
"ip": ["80","443"],
"via": ["tag:office-routers"],
},
]
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
ACLでIPセットを参照する
次の例は、prodIPセットを参照するACLの作成方法を示しています。
"acls": [
{
"src": ["group:devops"],
"dst": ["ipset:prod:*"],
"action": "accept",
},
],
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。
autogroup:internetをカスタマイズする
IPセットを使うと、autogroup:internetを使って、tailnet内の(有効になっている場合の)Exit Nodeを経由するトラフィックをカスタマイズできます。
次の例は、internetという名前のIPセットを作成し、以下の方法でautogroup:internetをカスタマイズします。
autogroup:internetを追加します。- 本番のアプリケーションゲートウェイ(
ipset:cdn-edge)を除外します。 - パブリックにアクセス可能なパートナーネットワーク(
ipset:partner-net)を除外します。 - シアトルオフィスとロンドンオフィスのExit Nodeへのアクセスを、
internetIPセット(インターネット向けトラフィックのサブセット)に許可(グラント)します。
"ipsets": {
"ipset:internet": [
"add autogroup:internet",
"remove ipset:cdn-edge",
"remove ipset:partner-net"
],
"ipset:cdn-edge": ["8.21.9.6", "8.21.9.7", "8.21.9.13", "8.21.9.14"],
"ipset:partner-net": ["52.23.40.0/24"]
},
"grants": [
{
"src": ["group:sea"],
"dst": ["ipset:internet"],
"ip": ["*"],
"via": ["tag:officerouter-sea"],
},
{
"src": ["group:lhr"],
"dst": ["ipset:internet"],
"ip": ["*"],
"via": ["tag:officerouter-lhr"],
}
]
ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。