OpenWrt22.03の可変IPアドレスPPPoEでサーバーをたてる

2022-11-09 21:30:43

OpenWrt22.03の可変IPアドレスPPPoEでサーバーをたてる

ASAHIネットが提供するサービスからこういう接続にしている。

  • IPv4フレッツ向け PPPoE FLETS いまではフレッツ速度計測専用。
  • IPv4インターネット向けクライアント用 DS-Lite WAN (デフォルトゲートウェイ) これが一番高速だがサーバーを立てられない。
  • IPv4インターネット向けサーバー用 PPPoE WANSV4 サーバーを立てられるが可変IP。DS-LiteがなければコレがWANでデフォルトゲートウェイ。
  • IPv6インターネット向けクライアント用 DHCP WAN6 (デフォルトゲートウェイ) これが一番高速だがサーバーを立てられない。

ここではLANインターフェースのIPアドレスを192.168.0.254、サーバーのIPアドレスを192.168.0.3とする。www.example.com を自ドメインのWebサーバーとする。

お名前.comはIPアドレスを更新するサービスを提供しているので、これを使って動的IPでも名前解決できる。

準備

1.パッケージを入れる。

  • luci-app-ddns
  • ddns-scripts
  • ddns-scripts-services。

2ルーティングの設定

Webサーバー

  • 192.168.0.3 www.example.com、httpsで立ててください。

DDNSの設定

  • Services - Dynamic DNS - Information - Services - myddns_ipv4 - Editボタン
    • Basic Settings - DDNS Service ProviderにでてくるメジャーDDNSをご利用の場合は、いい塩梅に設定してください。

DDNSの設定 お名前.com編

お名前.comはパッケージに入ってないが、IPアドレスをスクリプトから登録できるので、自力でなんとかできる余地がある。musashino205氏のスクリプトもあるのでお好みで好きな方を使ってください。 ここで使ったスクリプトの元ネタ: https://gist.github.com/Chirimen-Jako/

1.スクリプトを配置する。 /etc/config/update-onamae-ddns.sh

#!/bin/sh
# update-onamae-ddns
# https://gist.github.com/Chirimen-Jako/
#
# example for www.sample.com on interface pppoe-wansv4 for onamae.com
# Custom update-script: /etc/config/update-onamae-ddns.sh
# Username: $username=onamaeid
# Password: $passowrd=onamepw
# Domain: $domain=sample.com
# Optional Parameter: $param_opt=www pppoe-wansv4 ddnsclient.onamae.com cca25a6b211da1a98359abd277abbac1177b025faa18f45857845285be8b021b
userId=${username}
passWord=${password}
domainName=${domain}
hostName=$(echo $param_opt|awk '[print $1]')
ifname=$(echo $param_opt|awk '[print $2]')
onamaeServer=$(echo $param_opt|awk '[print $3]')
onamaePubkey=$(echo $param_opt|awk '[print $4]')
ipv4New="/tmp/DDNS_WAN_IPV4_new.txt"
ipv4Now="/tmp/DDNS_WAN_IPV4_now.txt"
pubkeyFile="/tmp/DDNS_Pubkey.txt"
modFile="/tmp/DDNS_modip.txt"
modResult="/tmp/DDNS_mod_result.txt"
modTmp1="/tmp/DDNS_mod_tmp1.txt"


while [ true ]; do
  ifconfig ${ifname}
  if [ $? -eq 0 ]; then
    break
  fi
  sleep 5
done

ifconfig ${ifname} | sed 's/:/ /g' | awk '/inet addr/ {print $3}' > $ipv4New
if [ ! -f ${ipv4Now} ]; then
        touch $ipv4Now
fi
cmp -s $ipv4New $ipv4Now
if [ $? = 0 ]; then
        echo "Same IP address. (`cat $ipv4New`)"
else
        echo "Q" | openssl s_client -connect ${onamaeServer}:65010 2>/dev/null | openssl x509 -pubkey -noout | openssl rsa -pubin -outform der 2>/dev/null | openssl sha256 -r | awk -F' ' '{print $1}' > $pubkeyFile
        pubkey=`cat $pubkeyFile`
        if [ $pubkey != $onamaePubkey ]; then
                logger -s -t $0 "public keys don't match. pubkey:$pubkey onamaePubkey:$onamaePubkey"
        else
(echo "LOGIN
USERID:$userId
PASSWORD:$passWord
.
MODIP
HOSTNAME:$hostName
DOMNAME:$domainName
IPV4:`cat $ipv4New`
.
LOGOUT
.
") > $modFile

                cat $modFile | awk '{print $_;} /^\./ { system ("sleep 1"); }' | openssl s_client -connect ${onamaeServer}:65010 -quiet 2>/dev/null > $modResult
                cat $modResult | sed -e "/^000 COMMAND SUCCESSFUL$/d" -e "/^\.$/d" > $modTmp1
                if [ -s $modTmp1 ]; then
                        logger -s -t $0 "IP address update failed. See ${modResult} 
`cat $modResult`"
                else
                        rm $modResult
                        logger -s -t $0 "IP address updated successfully. (`cat $ipv4Now`)->(`cat $ipv4New`)"
                fi
                rm $modTmp1
                rm $modFile
        fi
        rm $pubkeyFile
fi
mv -f $ipv4New $ipv4Now
chmod 600 $ipv4Now

2.Services - Dynamic DNS - Information - Services - myddns_ipv4 - Editボタン

  • Basic Settings - Enabled: チェックあり
  • Basic Settings - Lookup Hostname: www.example.com
  • Basic Settings - DDNS Service provider: -- custom --
  • Basic Settings - custom update-script: /etc/config/update-onamae-ddns.sh
  • Basic Settings - Domain: example.com
  • Basic Settings - Username: (お名前.comから提供されたユーザー名)
  • Basic Settings - Password: (お名前.comから提供されたパスワード)
  • Basic Settings - Optional Parameter: www pppoe-wansv4 ddnsclient.onamae.com cca25a6b211da1a98359abd277abbac1177b025faa18f45857845285be8b021b
    • ホスト名
    • 可変IPアドレスのインターフェース名
    • お名前.comのサーバー名
    • お名前.comの更新キー
  • Advanced Settings - IP address source: Network
  • Advanced Settings - Network: wansv4
  • Advanced Settings - DNS-Server: 01.dnsv.jp

PPPoEからサーバーへのポートフォワーディング設定

  1. Network - Firewall - Port Forwards - Addボタン

    ここではhttpsを例にしているが、複数のプロトコルを設定してよい。

    • Name: HTTPS
    • Protocol: TCP UDP
    • Source zone: wan
    • External Port: 443
    • Destination Zone: lan
    • Internal IP address: 192.168.0.3
  2. Network - Firewall - Traffic Rules - Addボタン
    • General Settings - Name: Policy-sv4-sv
    • General Settings - Protocol: TCP UDP ICMP IGMP
    • General Settings - Source zone: lan
    • General Settings - Source address: 192.168.0.3
    • General Settings - Destination zone: lan
    • General Settings - Destination address: !192.168.0.0/24
    • General Settings - Action: apply firewall mark
    • General Settings - Set mark: 0x20

参考