🖥️

DDNSで外部公開しているwebページにLAN内からアクセス

2023/09/18に公開

TL;DR

  • hostsにDDNSのホスト名→LAN IPを追記
  • hostsが使えない場合、hostsにDDNSのホスト名→LAN IPを追記したプロキシサーバーを立ち上げてそれに接続

背景

例えばNextCloudのようにリバースプロキシを利用するためにOVERWRITECLIURLやOVERWRITEHOSTでDDNSのホスト名:ポートを指定しているとLAN IP直打ちでアクセスしても特定操作でそのホスト名にリダイレクトされるが、インターネットからであれば当然ホスト名解決できているのでアクセスはできるものの、LAN内からアクセスしたときは何も対策していないとホスト名解決に失敗して接続できない。

hostsが変更できる端末の場合

hostsファイルにDDNSのホスト名→LAN IPを追記するだけ。
WindowsならC:\Windows\System32\drivers\etc\hosts

ブラウザ再起動して再度アクセス

hostsが変更できない端末の場合

例えばAndroidの場合は改造でもしない限りhostsファイルを変更することはできない。
回避方法として、LANに接続した状態で名前解決ができるプロキシサーバーに接続する。

同一サーバー上でDocker版Squidを使用する例

squid.confで以下の個所を最低限変更してローカルに保存

squid.conf
・・・
#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
# http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
# http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
# http_access deny manager
・・・
# And finally deny all other access to this proxy
# http_access deny all
・・・

コンテナ起動

docker run \
--restart=always \
--add-host=ホスト名:172.17.0.1 \
-p 公開ポート:3128 \
-v ./squid.conf:/etc/squid/squid.conf \
-v ./log:/var/log/squid \
-v ./spool:/var/spool/squid \
--name squid \
-itd ubuntu/squid:5.7-23.04_edge

--add-hostを指定することでhostsファイルに名前解決の組み合わせが追記される。
172.17.0.1:コンテナ内からホストにアクセスできるIP

AndroidのWiFi設定で、上記コンテナを立ち上げたサーバーのLAN IP:公開ポートを指定したプロキシサーバーの設定を作成して接続

Discussion