2021-04-17

DHCP classless static routesを使用したグローバルIPアドレスによるローカルサーバ接続

はじめに

自宅サーバーを運営していて、LANからもサーバーにアクセスしたい場合は、LAN向けにDNSサーバーを立てる方法がよく取られる。 これは、LANの接続点が1個のルーターであり、このルーター上でNATにより自宅サーバーへのアクセスをLANアドレスへ変換するようなネットワーク設定で取られる方法である。 この方法では、DNSサーバーで、自宅サーバーのホスト名を引いた時にLAN内のローカルアドレスを指すように設定しておく。 しかしながら、この方法では、携帯電話などでLANからWANへと移動した際に、古いアドレスがキャッシュに残っていてすぐには名前解決できなくなる。 ルーターによっては、このような設定を行わなくても、WANアドレスでのアクセスもNATでアドレス変換してくれることがあるが、いくつかのルーターではそのようなことができない。

この記事では、上記の問題を回避する別の方法を紹介する。 LAN上でホストにIPアドレスを割り振る際にDHCPを使用するが、DHCPのオプション121で静的ルーティングテーブルを送ることができる。 サーバーのアドレスが頻繁には変更されない場合、ルーティングテーブルを送りつけることで、自宅サーバーのグローバルIPアドレスをクライアント側で実際のサーバーへルーティングすることができ、グローバルIPアドレスのままで自宅サーバーへ接続できるようになる。

Dnsmasq

今回の記事では、DHCPサーバーとしてdnsmasqを使用する。 サーバーのグローバルIPアドレスが203.0.113.40で、LAN上でのサーバーアドレスが192.168.0.2である場合、以下のように/etc/dnsmasq.confに設定する。
dhcp-option=203.0.113.40/32,192.168.0.2

ネットワークデバイスの設定

雑な方法だが、NICにグローバルIPアドレスを追加すると、203.0.113.40宛のパケットが自身宛だと思い込み、通信出来るようになる。
sudo ip addr add 203.0.113.40/32 dev enp11s0

クライアント側での確認

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 eth1
203.0.113.40    192.168.0.2     255.255.255.255 UGH   100    0        0 eth1
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth1

0 件のコメント:

コメントを投稿