1. Home
  2. /
  3. ネットワーク
  4. /
  5. NATテーブル溢れ対策

NATテーブル溢れ対策

NATテーブル溢れ対策

最近インターネットの調子が悪い。しょっちゅう通信が詰まる。通信が詰まっても数十秒で復帰するのですが、日に何度も発生しておりかなり困っています。

10GルーターUbiqiti Dream Machine Proを購入した

10GルーターUbiqiti Dream Machine Proを購入した

前回の記事で10G回線導入に向けてUbiquiti Dream Machine Proを購入しました。 自宅の10G回線を検討する 今回の記事は下記記事の続きです。 令和5年最新版 自宅ネットワークまとめ これから自宅のネットワーク環境の話をするときに今住んでいる物件の現況をここで纏めようと思います。 部屋探し 現在のマンションのネットワーク構成を話す前にどういう視点で部屋を探したかを話します。 コロナ禍での引越にあたり下記条件を不動産屋さんに提示して家探しをお願いしました。 ■絶対条件 NTTの光を独自に引ける 40A以上の電源契約が可能 各部屋に1つ以上壁コンセントにアースが来てる ■あると嬉しい条件 NTT以外のファイバーを引ける(NUROなど) 各部屋に有線LANコンセントがある もちろんこれ以外にも居住にあたっての条件はありましたが割愛いたします。 今回は10G回線導入に向けてどこの回線事業者と契約するか、宅内のルーターをどうするか検討します。なお最終的に10G回線を契約しなかったためこの記事はポエムです。 今回は設置作業を行います。

自宅ではUbiquiti Dream Machine Pro(UDM)をルーターとして利用しています。UDMではWANを2系統用意できるため、片方の回線で障害が発生したときに別の回線を利用できます。通信が詰まる時間は数十秒ですが、この機能により主回線 → 副回線にフォールバックしてその後に主回線に復帰するまで1分程度通信が詰まります。

この通信が詰まっている状態、復帰直後にSpeedTestを実行しても通信速度が落ちている等はありません。この症状、おぼろげながら原因が浮かんできます。これ、NATテーブル溢れだ……

NATとは

インターネットに接続する際にルーターに接続されたたくさんの機器が1つのグローバルIPを共有して外に出ていきます。この時使われるのがNATです。

ルーターは通信ごとにどの機器からの通信かを記録して、外から戻ってきた通信を元の機器へ届けます。 普段は意識する必要はありませんが、同時にたくさんの通信が流れるほど、この記録テーブルが増えていきます。

NATテーブル溢れとは

ルーターのNATテーブルが満杯になり、新しい通信ができなくなる状態です。 Webやアプリが急に固まったようになり、数十秒すると自然に復活する…… といった問題が発生します。

ルーターの配下にたくさんの機器がぶら下がっていたり、一台の機器でも数多くの通信を行っていたりすると発生します。

現在の自宅の環境では、50〜60台程度の機器が繋がっておりまさにこの状態です。また、ルーターはマンション内の全世帯で共用されており、各家庭にマンションルーターからプライベートIPが割り当てられています。そのため1つのグローバルIPを複数世帯で共有する構造のため、1世帯で使えるNATのテーブル数はさらに少なくなっています。

現状確認

現状、我が家の通信量はどの程度あるのか確認します。幸い、UDMにはたくさんのログ取得機能があるのでInsightのページで簡単に確認できます。

1か月の通信回数は856万回でした。1時間に1万2千回程度の通信となります。1つのグローバルIPを占有できるのであればこの程度は捌けますが、今回の複数世帯共有という状況では厳しいかも知れません。

各機器毎の通信情報も確認可能なため確認すると概ね下記が多数の通信を発生させていました。

  • DNS
  • Tailscale
  • UDMのPing
  • LLMエージェント
  • Google Home

DNSとTailscaleの通信量については対策が可能なので対応を行います。

UDMのPingについては、WANの接続状況を監視するためにUDM側で自動で行われている物で対策が難しいです。

LLMエージェントについては、LLMとの接続で多数のセッションやセッション時間が長いという課題がありますがこちらも解決策は思いつかないため対策が難しいです。

Google Homeに関しては宅内に4台あり、それぞれが数秒毎にGoogleと接続していました。これも対策のしようがないです……。

DNS対策

DNSについてはこれまで、「1.1.1.1」を各機器にDHCPで広報して利用していました。これではgoogle.comというドメインをIPアドレスとしてDNSで引くときにすべての機器が同じ結果になるものを毎回問い合わせるというムダな通信が発生していました。

今回は宅内にDNSサーバーを新設しました。「AdGuard Home」サーバーを立てました。

GitHub - AdguardTeam/AdGuardHome: Network-wide ads & trackers blocking DNS server

Network-wide ads & trackers blocking DNS server. Contribute to AdguardTeam/AdGuardHome development by creating an account on GitHub.

AdGuard HomeはGitHub Repositoryのシェルスクリプトを動かすだけでお手軽にDNSサーバーを立てることができます。

アップストリーム設定

設定は下記の様にしました。上流のDNSサーバーの設定は下記にしました。

1.1.1.1
1.0.0.1
8.8.8.8
8.8.4.4
https://cloudflare-dns.com/dns-query
https://dns10.quad9.net:443/dns-query

ロードバランシング設定で運用しています。

DNSサーバー設定

頻度制限は「0」にして無制限にしました。各機器のDNS設定はルーターのIPアドレスにして、ルーターがAdGuard Homeに問い合わせるという形にするため無制限としました。

キャッシュ設定

WAN側への問い合わせを減らすため、DNSキャッシュを有効化します。キャッシュサイズは64MB、最小と最大TTLも上書きをして最低30秒はキャッシュするようにしました。

効果

24時間のDNSクエリは約13万回程度ありました。

DNSサーバーからWAN側へのアクセス数は24時間で約4万回でした。

これでこれまで24時間で13万回あった通信が3分の1程度に減り劇的な通信数削減となりました。

Tailscale対策

続いてTailscaleの通信を対応します。Tailscaleをインストールしている端末からは世界中への通信が発生しています。

これはTailscaleのDERPサーバーとの通信です。

DERP servers · Tailscale Docs

Tailscale uses Designated Encrypted Relay for Packets (DERP) servers for secure, low-latency connections in your tailnet. Customization options let you optimize device communication and NAT traversal.

Tailscaleはポート開放ができないような環境でもVPNで通信が可能です。この通信の確立のために世界中に設置されたDERPサーバーで接続を確立します。

またTailscaleの端末同士が直接接続できない場合はDERPサーバーで通信そのものが中継されます。この仕組みにより、ユーザーはTailscaleをインストールするだけでVPNネットワークを構築できます。

問題はルーター配下に複数台Tailscaleを入れていると各クライアントからDERPサーバー宛の通信が大量発生します。

この問題の対策としてDERPサーバーを個人で立てて経路をある程度固定するという逃げ方があります。

Custom DERP Servers · Tailscale Docs

Learn about custom DERP servers, their limitations, and how to set them up.

ですが、今回はより制御が行いやすい別のVPNへの移行を行いました。

さくらインターネットのVPS上にWireGuardをインストールして、UDMのVPNクライアント機能で接続を行いました。これによりVPS上にVPNで接続して自宅ネットワークにアクセスできるようになりました。こちらは別記事で解説する予定です。

Tailscaleは大変便利なシステムなのでApple TVのTailscaleのみ残して非常時のアクセス手段としては引き続き利用することとしました。

Apple TVでお手軽にVPNサーバーを構築

Apple TVでお手軽にVPNサーバーを構築

先日、TailscaleというVPN構築サービスのドキュメントを読んでいるとおもしろいページがありました。 Secure your internet traffic on public Wi-Fi using an Apple TV · Tailscale Docs Route Tailscale traffic through your Apple TV for secure, private browsing and access to region-locked content. Apple TVにアプリを入れるだけでVPNサーバーを構築できる……? まじ? Apple TVであれば常時電源ONの状態でTVに繋いでおり、サーバーとして理想的です。一般のご家庭向け製品で改造等も不要でアプリを入れるだけで導入できるVPNサーバーとしては最強製品になるでしょう。

対策結果

DNSサーバーの新設、Tailscale利用の削減(5台 → 1台)により1時間の通信数が1万2千 → 8千回に削減できました。

この対策でNTT回線が詰まることはなくなりました。恐らくマンションの他の世帯にも影響を出していたと思うので早めの対策ができて良かったです。

ただ今後も通信数は増えていくでしょうし、IPv6に関しては多重NATで上流のマンションルーターが良い感じにIPv6アドレスを配布できないため利用できません。

どうにもこうにもならなくなったら、通信をすべてVPS側に流すことでVPS側のグローバルIPが利用できるためいずれ検討が必要になるかもしれません。

サイト内の商品リンクは一部アフィリエイトリンクとなっています

関連記事

Tailscaleの冗長構成を構築

Tailscaleの冗長構成を構築

我が家のネットワークはマンション回線のためグローバルIPがなく、ポート開放ができません。IPv6周りも宅内には振っていないので利用することができません。 そのため、HTTP/HTTPSの通信にはCloudflare Tunnelを利用しています。それ以外の通信や宅内のSubnetへのアクセスにはTailscaleを利用しています。 今回は自宅SubnetへのアクセスのためのTailscaleの冗長構成を構築します。
Apple TVでお手軽にVPNサーバーを構築

Apple TVでお手軽にVPNサーバーを構築

先日、TailscaleというVPN構築サービスのドキュメントを読んでいるとおもしろいページがありました。 Secure your internet traffic on public Wi-Fi using an Apple TV · Tailscale Docs Route Tailscale traffic through your Apple TV for secure, private browsing and access to region-locked content. Apple TVにアプリを入れるだけでVPNサーバーを構築できる……? まじ? Apple TVであれば常時電源ONの状態でTVに繋いでおり、サーバーとして理想的です。一般のご家庭向け製品で改造等も不要でアプリを入れるだけで導入できるVPNサーバーとしては最強製品になるでしょう。