Tailscaleロゴ

IPセット

最終検証日:
翻訳: 竹洞 陽一郎

IPセット(IP set)は、IPアドレスのグループを管理するための仕組みです。
IPアドレス、CIDR、ホスト、オートグループ、他のIPセットなど、ターゲットの集合をカプセル化できます。
Tailscaleは、IPセット内のすべての要素をIPアドレス範囲のリストに変換します。
ipset構文を使うと、tailnetポリシーファイル内でIPセットを作成し、ACLグラントなどのアクセス制御ポリシーから参照できます。

IPセットの主な利点は、複数のネットワーク部分を1つのコレクションにグループ化できることです。
これにより、個々のIPアドレス、ホスト、サブネットではなく、そのコレクションに対してアクセス制御ポリシーを適用できます。

IPセットは、さまざまな用途に活用できます。例えば、次のようなことができます。

制限事項

IPセットには、以下の制限があります。

構文

ipsetは、tailnetポリシーファイル内で1つ以上の名前付きipsetsを定義するオブジェクトです。
各名前付きipsetには、1つ以上のオペレーションが含まれ、それぞれがターゲットを追加または削除します。

次の例は、tailnetポリシーファイルでipsetを作成する際の基本構文を示しています。<name>はIPセットの名前、<target>はCIDR、IPアドレス、ホスト、オートグループ、またはIPセットです。

"ipsets": {
  "ipset:<name>": [
    "add <target>",
    "remove <target>"
  ]
}

ビジュアルポリシーエディタを使ってtailnetポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。

オペレーション

ipset構文は、addremoveの2つのオペレーションをサポートします。各名前付きIPセットには、1つ以上のオペレーションを設定でき、順番に処理されます。

名前付きIPセットがaddオペレーションのみを使用する場合を除き、ターゲットの前にオペレーションの種類を含める必要があります。

ipsetのオペレーション
オペレーション 説明
add 名前付きIPセットにターゲットを追加します。
remove 名前付きIPセットからターゲットを削除します。

ターゲット

ターゲットとは、名前付きIPセットに追加または削除する、CIDR、IPアドレス、ホスト、オートグループ、またはIPセットです。
名前付きIPセットがターゲットの追加のみを行う(IPアドレスを削除しない)場合を除き、各ターゲットの前にはオペレーション(addまたはremove)を付ける必要があります。

ターゲットの種類
ターゲット 構文
CIDR <cidr> 192.0.2.0/242001:db8::/32
IPアドレス <ip-address> 192.0.2.332001:db8::
IPアドレス範囲 <ip-range-start>-<ip-range-end> 192.0.2.50-192.0.2.1002001: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セットは、ターゲットを削除しません。そのため、オペレーションの種類を省略した簡略構文を使用できます(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をカスタマイズします。

"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ポリシーファイルを管理することもできます。
ビジュアルエディタの使い方については、ビジュアルエディタリファレンスを参照してください。