サービスメッシュ Kuma で iptables と resolv.conf の設定を取得する方法

# サービスメッシュ Kuma で iptables と resolv.conf の設定を取得する方法

[日立グループ OSS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/hitachi-oss) の 14 日目の記事です。

(株)日立製作所 研究開発グループ サービスコンピューティング研究部の上野です。

Transparent Proxy は、`kumactl install transparent-proxy`コマンドで一気に設定できますが、何が設定されるのか把握したい方もいらっしゃると思います。そのようなときは`--dry-run`オプションを使うと、設定される内容を確認できます。

本記事では、`kumactl install transparent-proxy`コマンドの`--dry-run`オプション、そこから得られる iptables と`resolv.conf`の設定について解説します。
なお、Kuma に関する説明は[こちらの記事](https://qiita.com/t-mogi/items/954e529a037c4e283954)を参照、Transparent Proxy に関する説明は[こちらの記事](https://qiita.com/t-ide/items/50cfe2af1e206ee9fbd9)を参照下さい。

## 設定取得方法と iptables と resolv.conf の出力例

Transparent Proxy 構成において Kuma Data Plane の iptables と`resolv.conf`の設定は、`kumactl install transparent-proxy`コマンドにて`--dry-run`オプションを使用することでその内容を表示できます。

```sh
sudo kumactl install transparent-proxy \
    --kuma-dp-user kuma-dp \
    --kuma-cp-ip $CONTROL_PLANE_IP \
    --dry-run
```

上記コマンドを実行した結果、以下のような結果が出力されます。
iptables と`resolv.conf`の設定については、この出力例を用いて次の項から解説しています。

```sh
Environment:
------------
ENVOY_PORT=
INBOUND_CAPTURE_PORT=
INBOUND_CAPTURE_PORT_V6=
ISTIO_INBOUND_INTERCEPTION_MODE=
ISTIO_INBOUND_TPROXY_MARK=
ISTIO_INBOUND_TPROXY_ROUTE_TABLE=
ISTIO_INBOUND_PORTS=
ISTIO_OUTBOUND_PORTS=
ISTIO_LOCAL_EXCLUDE_PORTS=
ISTIO_SERVICE_CIDR=
ISTIO_SERVICE_EXCLUDE_CIDR=
ISTIO_META_DNS_CAPTURE=

Variables:
----------
PROXY_PORT=15001
PROXY_INBOUND_CAPTURE_PORT=15006
PROXY_INBOUND_CAPTURE_PORT_V6=15010
PROXY_TUNNEL_PORT=15008
PROXY_UID=1001
PROXY_GID=1001
INBOUND_INTERCEPTION_MODE=REDIRECT
INBOUND_TPROXY_MARK=1337
INBOUND_TPROXY_ROUTE_TABLE=133
INBOUND_PORTS_INCLUDE=*
INBOUND_PORTS_EXCLUDE=
OUTBOUND_IP_RANGES_INCLUDE=*
OUTBOUND_IP_RANGES_EXCLUDE=
OUTBOUND_PORTS_INCLUDE=
OUTBOUND_PORTS_EXCLUDE=
KUBEVIRT_INTERFACES=
ENABLE_INBOUND_IPV6=true
DNS_CAPTURE=false
REDIRECT_ALL_DNS_TRAFFIC=false
DNS_SERVERS=[],[]
AGENT_DNS_LISTENER_PORT=15053
DNS_UPSTREAM_TARGET_CHAIN=RETURN

ip -6 addr add ::6/128 dev lo
Writing following contents to rules file:  /tmp/iptables-rules-1637226053491442666.txt924869675
* nat
-N MESH_INBOUND
-N MESH_REDIRECT
-N MESH_IN_REDIRECT
-N MESH_OUTPUT
-A MESH_INBOUND -p tcp --dport 15008 -j RETURN
-A MESH_REDIRECT -p tcp -j REDIRECT --to-ports 15001
-A MESH_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15006
-A PREROUTING -p tcp -j MESH_INBOUND
-A MESH_INBOUND -p tcp --dport 22 -j RETURN
-A MESH_INBOUND -p tcp -j MESH_IN_REDIRECT
-A OUTPUT -p tcp -j MESH_OUTPUT
-A MESH_OUTPUT -o lo -s 127.0.0.6/32 -j RETURN
-A MESH_OUTPUT -o lo ! -d 127.0.0.1/32 -m owner --uid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -o lo ! -d 127.0.0.1/32 -m owner --gid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -d 127.0.0.1/32 -j RETURN
-A MESH_OUTPUT -j MESH_REDIRECT
COMMIT

iptables-restore --noflush /tmp/iptables-rules-1637226053491442666.txt924869675
Writing following contents to rules file:  /tmp/ip6tables-rules-1637226053494326547.txt646475150
* nat
-N MESH_INBOUND
-N MESH_REDIRECT
-N MESH_IN_REDIRECT
-N MESH_OUTPUT
-A MESH_INBOUND -p tcp --dport 15008 -j RETURN
-A MESH_REDIRECT -p tcp -j REDIRECT --to-ports 15001
-A MESH_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15010
-A PREROUTING -p tcp -j MESH_INBOUND
-A MESH_INBOUND -p tcp --dport 22 -j RETURN
-A MESH_INBOUND -p tcp -j MESH_IN_REDIRECT
-A OUTPUT -p tcp -j MESH_OUTPUT
-A MESH_OUTPUT -o lo -s ::6/128 -j RETURN
-A MESH_OUTPUT -o lo ! -d ::1/128 -m owner --uid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -o lo ! -d ::1/128 -m owner --gid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -d ::1/128 -j RETURN
-A MESH_OUTPUT -j MESH_REDIRECT
COMMIT

ip6tables-restore --noflush /tmp/ip6tables-rules-1637226053494326547.txt646475150
iptables-save
ip6tables-save

nameserver <Control Plane の IPアドレス>
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver <元々のDNS名>
search <AWSのRegion>.compute.internal

Transparent proxy set up successfully
```

## iptables の解説

Kuma は IPv4 環境に加えて IPv6 環境および IPv4 と IPv6 の混合環境もサポートしており、これらのセットアップは特に考慮せずとも Kuma が行ってくれます。
以降では、コマンドとそれに付随するオプションについて紹介して、出力例の解説を記述しています。

### コマンド

- `iptables-restore`, `ip6tables-restore`: それぞれ IPv4 用のテーブルと IPv6 用のテーブルをファイルから復元するコマンドです。`--noflush`オプションを使うことで、これまでの IP テーブルの内容を削除せず保ったまま、IP テーブルを復元します。
- `* <テーブル名>`: iptables では、この形式で使用するテーブル名(`filter`、`nat`、`mangle`、`raw`、`security`)を指定します。

### iptables のコマンドオプション

iptables が行う特定の動作を指定します。

- `-N`: 新しいチェインを作成します。
- `-A`: チェインを指定して、そのチェインの終わりにルールを追加します。

### iptables のパラメータオプション

パケットフィルタリングのルールを構築するためのパラメータを指定します。
なお、オプションの頭に`!`をつけると、そのオプションは not の意味になります。

- `-p`: 対象とするプロトコル(`tcp`、`udp`、`icmp`、`all`)を指定します。
- `--dport`: `-p`オプションの拡張オプション。宛先ポート番号を指定します。
- `-j`: パケットの次のジャンプ先のターゲットを指定します。ターゲットの値は標準オプション(`ACCEPT`、`DROP`、`QUEUE`、`RETURN`)またはユーザ定義のチェイン名です。
- `--to-ports`: パケットが転送されるポート番号を指定します。
- `-o`: 宛先インタフェース名を指定します。`-o lo`はループバックアドレスからのアクセスを許可すします。
- `-s`: パケットの送信元を指定します。
- `-d`: ルールと一致するパケットの宛先ホスト名、IP アドレス、ネットワークのいずれかを設定する。
- `-m`: モジュール名を指定して、指定したモジュールを読み込みます。ここで使用されている`owner`モジュールは下記のオプションをとります。
    - `--uid-owner`: パケットを生成したプロセスの実行ユーザ ID を指定します。
    - `--gid-owner`: パケットを生成したプロセスの実行グループ ID を指定します。
    - `--pid-owner`: パケットを生成したプロセス ID を指定します。
    - `--sid-owner`: パケットを生成したプロセスのセッション ID を指定します。
    - `--cmd-owner`: パケットを生成したプロセスのコマンド ID を指定します。

### 出力例の解説

下記の出力例から、IPv4 用のテーブルと IPv6 用のテーブルの 2 つに設定が施されていることがわかります。

```sh
# <<<<<<< IPv4用のテーブルの設定
Writing following contents to rules file:  /tmp/iptables-rules-1637226053491442666.txt924869675

* nat # natテーブル: ネットワークアドレス変換の設定

# 新しいチェインを作成する
-N MESH_INBOUND
-N MESH_REDIRECT
-N MESH_IN_REDIRECT
-N MESH_OUTPUT
# 上記以外で使用されるデフォルトのチェイン
## PREROUTING: ルーティング前に実行される。パケット受信時に宛先のアドレスやポートを変換する。
## INPUT: ローカルプロセス前に実行される。パケットの受信の許可や拒否をする
## OUTPUT: ローカルプロセス後に実行される。パケットの送信の許可や拒否をする
## POSTROUTING: パケット送信時に送信元のアドレスやポートを変換する。

# パケットの移動先として使用されるターゲット
## RETURN: 現在のチェイン内にあるルールに対するパケットの確認を停止し、パケットが他チェインから呼び出されていたら元のチェインに戻ってパケットのチェックを再開する。
## REDIRECT: パケットをリダイレクトする。--to-portsオプションで、ポートやポートの範囲を指定し、指定された宛先ポートへリダイレクトする。

# 各チェインにルールを追加する
-A MESH_INBOUND -p tcp --dport 15008 -j RETURN
-A MESH_REDIRECT -p tcp -j REDIRECT --to-ports 15001
-A MESH_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15006
-A PREROUTING -p tcp -j MESH_INBOUND
-A MESH_INBOUND -p tcp --dport 22 -j RETURN
-A MESH_INBOUND -p tcp -j MESH_IN_REDIRECT
-A OUTPUT -p tcp -j MESH_OUTPUT
-A MESH_OUTPUT -o lo -s 127.0.0.6/32 -j RETURN
-A MESH_OUTPUT -o lo ! -d 127.0.0.1/32 -m owner --uid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -o lo ! -d 127.0.0.1/32 -m owner --gid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -d 127.0.0.1/32 -j RETURN
-A MESH_OUTPUT -j MESH_REDIRECT

# 追加したルールをコミット
COMMIT

# >>>>>>> IPv4用のテーブルの設定

# これまでのIPv4用のテーブルの内容を保ったまま、ファイルからテーブルを復元する。読み込むファイルは上記で編集したファイルと同じものである。
iptables-restore --noflush /tmp/iptables-rules-1637226053491442666.txt924869675

# <<<<<<< IPv6用のテーブルの設定
Writing following contents to rules file:  /tmp/ip6tables-rules-1637226053494326547.txt646475150

* nat # natテーブル: ネットワークアドレス変換の設定

# 新しいチェインを作成する
-N MESH_INBOUND
-N MESH_REDIRECT
-N MESH_IN_REDIRECT
-N MESH_OUTPUT

# 上記以外で使用されるデフォルトのチェイン
# IPv4用のテーブルの設定と同様

# パケットの移動先として使用されるターゲット
# IPv4用のテーブルの設定と同様

# 各チェインにルールを追加する
-A MESH_INBOUND -p tcp --dport 15008 -j RETURN
-A MESH_REDIRECT -p tcp -j REDIRECT --to-ports 15001
-A MESH_IN_REDIRECT -p tcp -j REDIRECT --to-ports 15010
-A PREROUTING -p tcp -j MESH_INBOUND
-A MESH_INBOUND -p tcp --dport 22 -j RETURN
-A MESH_INBOUND -p tcp -j MESH_IN_REDIRECT
-A OUTPUT -p tcp -j MESH_OUTPUT
-A MESH_OUTPUT -o lo -s ::6/128 -j RETURN
-A MESH_OUTPUT -o lo ! -d ::1/128 -m owner --uid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --uid-owner 1001 -j RETURN
-A MESH_OUTPUT -o lo ! -d ::1/128 -m owner --gid-owner 1001 -j MESH_IN_REDIRECT
-A MESH_OUTPUT -o lo -m owner ! --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -m owner --gid-owner 1001 -j RETURN
-A MESH_OUTPUT -d ::1/128 -j RETURN
-A MESH_OUTPUT -j MESH_REDIRECT

# 追加したルールをコミット
COMMIT

# >>>>>>> IPv6用のテーブルの設定

# これまでのIPv6テーブルの内容を保ったまま、ファイルからIPテーブルを復元する
ip6tables-restore --noflush /tmp/ip6tables-rules-1637226053494326547.txt646475150
# 現在のIPテーブルの設定をファイルに保存する
iptables-save
# 現在のIPv6テーブルの設定をファイルに保存する
ip6tables-save
```

以下に、上記の設定によって作成される IPv4 用のテーブルと IPv6 用のテーブルに定義されているチェインとそのチェイン内のルールの一覧を記します。
ルールはチェインの上から下へ順々に処理されていきます。

送信元/宛先の情報、送信元のユーザ ID などから、パケットが inbound か outbound かを判定し、パケットの宛先ポートを設定した上で Envoy Proxy へ転送します。パケットが inbound の場合はポート 15006 (IPv4 の場合)または 15010 (IPv6 の場合)へ、outbound の場合は 15001 へ転送します。

Transparent Proxy 構成での挙動の詳細については、[こちらの記事](https://qiita.com/t-ide/items/50cfe2af1e206ee9fbd9)を参考にしくてください。

```sh
# IPv4用のテーブル

1. PREROUTING # ルーティング前に実行
   # TCPプロトコルならMESH_INBOUNDチェインへ
   -p tcp -j MESH_INBOUND

2. MESH_INBOUND
   # TCPプロトコルで宛先ポートが15008ならOUTPUTチェインへ
   -p tcp --dport 15008 -j RETURN
   # TCPプロトコルで宛先ポートが22ならOUTPUTチェインへ
   -p tcp --dport 22 -j RETURN
   # TCPプロトコルならMESH_IN_REDIRECTチェインへ
   -p tcp -j MESH_IN_REDIRECT

3. OUTPUT
   # TCPプロトコルならMESH_OUTPUTチェインへ
   -p tcp -j MESH_OUTPUT

4. MESH_OUTPUT
   # 宛先インターフェースがループバックアドレス かつ 送信元が127.0.0.6/32ならパケット確認終了&元のチェインに戻る&パケット確認再開
   -o lo -s 127.0.0.6/32 -j RETURN
   # 宛先インターフェースがループバックアドレス かつ 宛先が127.0.0.1/32以外 かつ パケット生成したプロセスの実行ユーザがkuma-dpならMESH_IN_REDIRECTへ
   -o lo ! -d 127.0.0.1/32 -m owner --uid-owner 1001 -j MESH_IN_REDIRECT
   # 宛先インターフェースがループバックアドレス かつ パケット生成したプロセスの実行ユーザがkuma-dp以外ならMESH_IN_REDIRECTへ
   -o lo -m owner ! --uid-owner 1001 -j RETURN
   # パケット生成したプロセスの実行ユーザがkuma-dpならパケット確認終了&元のチェインに戻る&パケット確認再開
   -m owner --uid-owner 1001 -j RETURN
   # 宛先インターフェースがループバックアドレス かつ 宛先が127.0.0.1/32以外 かつ パケット生成したプロセスの実行グループがkuma-dpならMESH_IN_REDIRECTへ
   -o lo ! -d 127.0.0.1/32 -m owner --gid-owner 1001 -j MESH_IN_REDIRECT
   # 宛先インターフェースがループバックアドレスかつパケット生成したプロセスの実行グループがkuma-dp以外ならパケット確認終了&元のチェインに戻る&パケット確認再開
   -o lo -m owner ! --gid-owner 1001 -j RETURN
   # パケット生成したプロセスの実行グループがkuma-dpならパケット確認終了&元のチェインに戻る&パケット確認再開
   -m owner --gid-owner 1001 -j RETURN
   # 宛先IPが127.0.0.1/32ならパケット確認終了&元のチェインに戻る&パケット確認再開
   -d 127.0.0.1/32 -j RETURN
   # MESH_REDIRECTへ
   -j MESH_REDIRECT

5. MESH_IN_REDIRECT
   # TCPプロトコルならenvoy proxyのinboundへ
   -p tcp -j REDIRECT --to-ports 15006

6. MESH_REDIRECT
   # TCPプロトコルならenvoy proxyのoutboundへ
   -p tcp -j REDIRECT --to-ports 15001
```

```sh
# IPv6用のテーブル

1. REROUTING
   -p tcp -j MESH_INBOUND # TCPプロトコルならMESH_INBOUNDチェインへ

2. MESH_INBOUND
   -p tcp --dport 15008 -j RETURN # TCPプロトコルで宛先ポートが15008ならOUTPUTチェインへ
   -p tcp --dport 22 -j RETURN # TCPプロトコルで宛先ポートが22ならOUTPUTチェインへ
   -p tcp -j MESH_IN_REDIRECT # TCPプロトコルならMESH_IN_REDIRECTチェインへ

3. OUTPUT
   -p tcp -j MESH_OUTPUTT # TCPプロトコルならMESH_OUTPUTチェインへ

4. MESH_OUTPUT
   # 宛先インターフェースがループバックアドレス かつ 送信元が::.6/128ならパケット確認終了&元のチェインに戻る&パケット確認再開
   -o lo -s ::6/128 -j RETURN
   # 宛先インターフェースがループバックアドレス かつ 宛先が::1/128以外 かつ パケット生成したプロセスの実行ユーザがkuma-dpならMESH_IN_REDIRECTへ
   -o lo ! -d ::1/128 -m owner --uid-owner 1001 -j MESH_IN_REDIRECT
   # 宛先インターフェースがループバックアドレス かつ パケット生成したプロセスの実行ユーザがkuma-dp以外ならMESH_IN_REDIRECTへ
   -o lo -m owner ! --uid-owner 1001 -j RETURN
   # パケット生成したプロセスの実行ユーザがkuma-dpならパケット確認終了&元のチェインに戻る&パケット確認再開
   -m owner --uid-owner 1001 -j RETURN
   # 宛先インターフェースがループバックアドレス かつ 宛先が::1/128以外 かつ パケット生成したプロセスの実行グループがkuma-dpならMESH_IN_REDIRECTへ
   -o lo ! -d ::1/128 -m owner --gid-owner 1001 -j MESH_IN_REDIRECT
   # 宛先インターフェースがループバックアドレスかつパケット生成したプロセスの実行グループがkuma-dp以外ならパケット確認終了&元のチェインに戻る&パケット確認再開
   -o lo -m owner ! --gid-owner 1001 -j RETURN
   # パケット生成したプロセスの実行グループがkuma-dpならパケット確認終了&元のチェインに戻る&パケット確認再開
   -m owner --gid-owner 1001 -j RETURN
   # 宛先IPが::1/128ならパケット確認終了&元のチェインに戻る&パケット確認再開
   -d ::1/128 -j RETURN
   # MESH_REDIRECTへ
   -j MESH_REDIRECT

5. MESH_IN_REDIRECT
   -p tcp -j REDIRECT --to-ports 15010 # TCPプロトコルならXDS および CA サービス用のポートへ

6. MESH_REDIRECT
   -p tcp -j REDIRECT --to-ports 15001 # TCPプロトコルならenvoy proxyでホストのoutboundへ
```

補足としてテーブル内で使用されている IP アドレスやポート番号等について、以下で説明します。

- `addr: 127.0.0.1/32, ::1/128`: パケットがホストで宣言されているサービスポートからである場合のマッピング先のアドレス
- `addr: 127.0.0.6/32, ::6/128`: パケットがホストで宣言されていないポートからである場合のマッピング先のアドレス
- `port: 15001`: サービスプロキシ Envoy の outbound 用のポート
- `port: 15006`: サービスプロキシ Envoy の inbound 用のポート
- `port: 15008`: HTTP ベースのオーバーレイネットワーク環境 HBONE の mTLS tunnnel 用のポート
- `port: 15010`: XDS および CA サービス用のポート
- `-m owner: 1001`: Kuma の Dataplane ユーザ`kuma-dp`のユーザ ID。`cat /etc/passwd | grep 1001`を実行すると確認できます。

## resolv.conf の解説

`kumactl install transparent-proxy`によって、`/etc/resolv.conf`内の DNS リゾルバのアドレスは変更されます。

以下で出力例を解説します。

```sh
# KumaのTransparent Proxyによって設定されるDNSリゾルバ
# resolv.confでは上にある設定を優先的に使用するため、こちらのDNSリゾルバがこれ以降のDNSリゾルバよりも優先的に使用される
nameserver <Control Plane の IPアドレス>

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients directly to
# all known uplink DNS servers. This file lists all configured search domains.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

# 元々設定されているDNSリゾルバ
nameserver <元々のDNS名>
search <AWSのRegion>.compute.internal
```

ただし、デフォルトの DNS リゾルバが`systemd-resolved`によって提供されているディストリビューション(Ubuntu など)において、`/etc/resolv.conf`を編集して使用する際には注意が必要です。
`systemd-resolved`において、`/etc/resolv.conf`は`/run/systemd/resolve/resolv.conf`へのシンボリックリンクとなっています。ゆえに`kumactl install transparent-proxy`によって、`/etc/resolv.conf`を編集しても`systemd-resolved`によって`/run/systemd/resolve/resolv.conf`の内容で上書きされてしまい、Kuma の Transparent Proxy の DNS リゾルバを使用できません。

```sh
# systemd-resolvedのシンボリックを確認
ls -l /etc/resolv.conf
# <出力例>
# lrwxrwxrwx 1 root root 39 Apr 30  2021 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

# DNSリゾルバの設定を確認
cat /run/systemd/resolve/resolv.conf
# <出力例>
# # This file is managed by man:systemd-resolved(8). Do not edit.
# #
# # This is a dynamic resolv.conf file for connecting local clients directly to
# # all known uplink DNS servers. This file lists all configured search domains.
# #
# # Third party programs must not access this file directly, but only through the
# # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# # replace this symlink by a static file or a different symlink.
# #
# # See man:systemd-resolved.service(8) for details about the supported modes of
# # operation for /etc/resolv.conf.
#
# nameserver <元々のDNS名>
# search <AWSのRegion>.compute.internal
```

Kuma の Transparent Proxy の DNS リゾルバを使用するためには、例えば、`--redirect-dns`機能を使用する方法があります。`kumactl install transparent-proxy`の`--redirect-dns`オプションについては、[こちらの記事](https://qiita.com/t-ide/items/50cfe2af1e206ee9fbd9)で紹介しているのでご参考ください。

なお、ここでの`kumactl install transparent-proxy`による`/etc/resolv.conf`の変更は特に意味がないため不要な場合は、`--skip-resolv-conf`オプションで停止させることができます。

## まとめ

本記事では、Transparent Proxy 構成時の変更内容を`kumactl install transparent-proxy`コマンドの`--dry-run`オプションで取得する方法を紹介しました。

Transparent Proxy 構成の導入によって、Kuma の存在を意識せずにアプリケーションを使用できるようになりますが、導入により何がどのように変わるのかわからないと導入を躊躇するのではないでしょうか。`--dry-run`オプションにより設定内容を自身で確認することで、既存環境への影響を把握したうえで設定を導入することが可能になります。
本記事が皆様の一助になれば幸いです。