0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ubuntu22.04 Jammy をNATルーターに仕立てるメモ

Posted at

Ubuntuは22.04を使用しているので、他のバージョン・ディストリビューションでは一部機能が提供されていない場合もあります。雑感としてはsystemd-networkdは進化の途中のようでバージョン間での非互換が多そうです。当初IPv6は上流からDHCPv6-PDで譲り受けたprefixを下流に広告していましたが、systemdのバージョンが上がると設定の書き方が変わってしまうので記載を見送りました。

今回の仕様

  • 上流からネットワーク情報を受け取り接続する
  • 下流からのIPv4通信はNATを経由して外部へアクセスする
  • 下流からのIPv6通信は上流から移譲を受けた予め設定したprefixでNATを経由する
  • キャッシュDNSサーバーを提供する
  • Ubuntuの今どきの(?)設定方法を踏襲する

ネットワーク設定

Ubuntu Serverではsystemd-networkdが使われています。systemdのサブコマンドですし、今後はnetworkdの採用が進むのでしょうか?

そして、基本設定は直接書くわけでなくnetplanを使うのがUbuntuの流儀のようです。
netplanはnetwrokdとNetworkManager両対応のコンフィグレーション生成プリプロセッサですが、rendererを指定しなければnetworkdの設定を/run/systemd/network以下に書き出してくれます。便利なもののすべてに対応できるわけでもないですし、canonicalオリジナルツール故に他のディストリでの採用はなさそうと微妙な気もします。

/etc/netplan/50-interface.yaml
network:
  ethernets:
    eth1:
      dhcp4: true
      dhcp6: true
      accept-ra: true
    eth2:
      optional: true
      addresses:
        - "192.0.2.1/24"
        - "2001:db8::/64"  <-- 上流からプレフィクス委譲を受ける場合は不要です

eth1は上流からDHCP, SLAACで各種情報を受け取ります。
eth2は下流へ192.0.2.1/24,2001:db8::/64で接続します。
※このIPアドレスは利用環境に応じて変更してください。

DHCPv4サーバー

netplanはnetworkdのすべての設定を行えるわけではないので、/etc/systemd/network/以下に追加の設定を別途行います。

/etc/systemd/network/10-netplan-eth2.network.d/dhcp.conf
[Network]
DHCPServer=yes
IPMasquerade=both  <-- IPv4のみNATする場合はipv4と書きます

[DHCPServer]
DNS=192.0.2.1

よほど凝った設定でなければnetworkdだけで対応できそうです。

IPMasqueradeはipv4, ipv6, bothでどちらかもしくは両方を対象にできます。

DNSキャッシュサーバー

昨今のディストリビューションだとsystemd-resolvedが使われていると思います。しかし、これは自ホストのみがDNSキャッシュを使えるようにローカルループバックでlistenしています。そこで、下流のクライアントが参照可能なIPアドレスを追加します。

/etc/systemd/resolved.conf.d/distribute.conf
[Resolve]
DNSStubListenerExtra=192.0.2.1

IPv6が必要なければここまでで完了です。

IPv6ルーター広告

IPv6を使う場合には、netplanで記載したeth2のprefixを下流にルーター広告します。これもnetworkdだけで実現できます。

/etc/systemd/network/10-netplan-eth2.network.d/slaac.conf
[Network]
IPv6SendRA=yes

[IPv6Prefix]
Prefix=2001:db8::/64

systemd-{networkd,resolved}の再起動

netplanを適用して再起動させれば反映されます。ネットワーク越しにしかアクセスできない機材へ設定している場合には念入りに確認してから反映するようにしてください。

$ systemctl restart systemd-resolved
$ netplan apply

そもそも無効化されている場合には有効にしないといけませんが、networkdが無効ということは、NetworkManagerなど他の管理機構が使われてるので調整が必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?