termuxでDDNSを更新テスト Softether VPN Server

 

2023-11-20

Rakuten Mini側の設定を保存

nano /data/data/com.termux/files/home/.bashrc

nano /data/data/com.termux/files/home/test2.sh
nano /data/data/com.termux/files/home/ubuntu-in-termux/addition.sh

chmod -x /data/data/com.termux/files/home/ubuntu-in-termux/ubuntu-fs/etc/init.d/vpnserver

nano /data/data/com.termux/files/home/ubuntu-in-termux/ubuntu-fs/root/start_service.sh

2023-11-03

 

やっぱりWindows10で実行するように変更しよう。

よって、RakutenMiniからは起動しないようにする。

プロセスを確認
ps aux | grep vpnserver

Termux環境で検索。

$ cd /data/data/com.termux
…/data/com.termux $ find . -name vpnserver 2>/dev/null
./files/home/ubuntu-in-termux/ubuntu-fs/usr/local/vpnserver
./files/home/ubuntu-in-termux/ubuntu-fs/usr/local/vpnserver/vpnserver
./files/home/ubuntu-in-termux/ubuntu-fs/etc/init.d/vpnserver
…/data/com.termux $

ubuntu環境で、vpnserver 無効
update-rc.d vpnserver disable

有効時は以下。
update-rc.d vpnserver enable

いや、うまくいかない起動してしまっている。

 

2023-04-06

結局現在の設定。

./startubuntu.sh “service cron start && service vpnserver start && /bin/bash”

Current date: 2023-04-06

User: Termux内のUbuntuを使ってCronを実行したいと思います。Termux無いという事で若干特殊であり、そもそもUbuntuを使ってCronが使えるか分かりません。確認方法をお願いします。

Assistant:

Ubuntuを実行しているTermux内でCronを実行することは可能です。以下は確認するための手順です。

  1. Ubuntuパッケージをアップデートするため、Ubuntuを起動し、ターミナルで以下のコマンドを実行します。
    sudo apt-get update && sudo apt-get upgrade
    
  2. Cronをインストールするため、以下のコマンドを実行します。
    sudo apt-get install cron
    
  3. Cronが正常に動作するか確認するため、以下のコマンドを実行します。
    sudo service cron status
    

    上記のコマンドを実行すると、Cronが起動しているかどうか、そして稼働中の場合はPID(プロセスID)が表示されます。

  4. Cronを設定するため、以下のコマンドを実行します。
    crontab -e
    

    これにより、設定ファイルが新しく開かれ、必要なCronジョブを追加することができます。

以上の手順に従えば、Termux内のUbuntuでCronを使用できるようになります。

User: TermuxないのUbuntuなので、sudoは要らないようですね。シングルユーザーしか使えないようなので・・・・

Assistant:

ご指摘ありがとうございます!Termux上のUbuntuはシングルユーザーしか使えないため、sudoを使用する必要はありません。また、Termux自体がrootアクセスを必要とするため、apt-getコマンドもsudoなしで動作します。

以上の情報を踏まえて、設定ファイルの編集にもsudoは不要です。すみません、前回の回答が不適切でした。

User: 以下のような状態になりました。つまりCronをインストールしました。起動の仕方。サービスとして常に起動したいのですが、おねがいします。
service cron status
* cron is not running
root@localhost:~/ddns_update# which cron
/sbin/cron

Assistant:

Cronがインストールされており、設定されている場合でも、システムの起動時に自動的にCronが開始されない場合があります。

以下は、Ubuntu 20.04でCronをサービスとして自動起動させる方法の手順です。Termuxでもこの手順通りに行う事で可能です。

  1. systemdのcronサービスの定義ファイル(cron.service)を作成する。
    sudo nano /etc/systemd/system/cron.service
    

    作成されるファイルには以下の内容を記載します。

    [Unit]
    Description=Regular background program processing daemon
    After=network.target
    
    [Service]
    Type=forking
    RemainAfterExit=yes
    ExecStart=/usr/sbin/cron -f
    ExecReload=/bin/kill -HUP $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    
  2. 作成されたcron.serviceファイルをシステムディレクトリにリロードする。
    sudo systemctl daemon-reload
    
  3. cron.serviceをシステムディレクトリに追加する
    sudo systemctl enable cron.service
    
  4. cronサービスを再起動する。
    sudo systemctl start cron.service
    

    以上の手順で、Cronをサービスとして開始できます。Cronが起動しているかどうかを確認するには、以下のコマンドを使用してください。

    sudo systemctl status cron.service
    

    上記のコマンドを実行すると、Cronが起動しているかどうかが表示されます。

以上の手順で、Cronをサービスとして自動起動することができます。

User: ああ、それが、、、Termux内のUbuntuと言う特殊環境の為、systemctlが使えないのではないかと。恐らく、etc/init.dなら使えるはずで、ちょっと古いですがこちらを使う事例をお願いします。

Assistant:

ご指摘ありがとうございます。確かに、TermuxのUbuntuではsystemdを使用することができません。そのため、systemdに代わるサービス管理システムを使用する必要があります。init.dはシステムV系のサービス管理システムであり、init.dを使用することで、Cronをサービスとして自動起動することができます。

以下は、Ubuntu 16.04 TLSでCronをサービスとして自動起動させる方法の手順です。

  1. /etc/init.d/cron を作成する。
    sudo nano /etc/init.d/cron
    

    作成されるファイルには以下の内容を記載します。

    #! /bin/sh
    # /etc/init.d/cron: start and stop the cron daemon
    
    # You must set CONSOLEACCESS=true in /etc/default/cron
    
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    DESC="Regular background program processing daemon"
    NAME=cron
    DAEMON=/usr/sbin/$NAME
    DAEMON_ARGS="-f"
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    CONSOLEACCESS=true
    test -x $DAEMON || exit 0
    #if [ -r /etc/default/cron ]; then
    #       . /etc/default/cron
    #fi
    #
    set -e
    
    case "$1" in
      start)
            echo -n "Starting $DESC: $NAME"
            start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
            echo "."
            ;;
      stop)
            echo -n "Stopping $DESC: $NAME"
            start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME
            echo "."
            ;;
      restart|force-reload)
            echo -n "Restarting $DESC: $NAME"
            start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME
            sleep 1
            start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
            echo "."
            ;;
      *)
            N=/etc/init.d/$NAME
            echo "Usage: $N {start|stop|restart|force-reload}" >&2
            exit 1
            ;;
    esac
    
    exit 0
    

    完了後、ファイルのアクセス権を変更します。

    sudo chmod +x /etc/init.d/cron
    
  2. cronサービスを自動起動するように設定します。
    sudo update-rc.d cron defaults
    
  3. cronを起動します。
    sudo service cron start
    

    初回起動時には、initスクリプトで指定したオプション(ここでは「-f」)がcronに渡され、cronがバックグラウンドで実行されます。

以上の手順で、Ubuntu内のCronをサービスとして自動起動することができます。ただし、こちらの手順はUbuntu 16.04 TLSに対してのものであり、Termuxには既に異なるバージョンのUbuntuが含まれているため、手順を若干変更する可能性があります。

 

 

Current date: 2023-04-06

User: termuxについて伺います。systemdが無いようなので代わりに昔ながらの/etc/init.dを使うという情報がありました。これしかないですかね

Assistant:

TermuxはAndroidのターミナルエミュレーターであり、AndroidのOSとは異なるため、systemdとは互換性がありません。そのため、init.d スクリプトを使用することができます。以下のコマンドを入力してinit.dスクリプトを有効にすることができます。

termux-setup-storage
mkdir -p $PREFIX/etc/init.d
echo "#!/data/data/com.termux/files/usr/bin/sh" > $PREFIX/etc/init.d/sshd
chmod +x $PREFIX/etc/init.d/sshd

これで、Termuxでinit.dスクリプトを作成して有効にすることができます。ただし、Termuxの制限により、一部のスクリプトは正しく動作しない可能性があるため、詳細については公式ドキュメントを確認することをお勧めします。

User: では、vpnserver.serviceを作っていたのが使えないようなので、
これをinit.dを使って作り直すことはできますか?
vpnserver.serviceの内容は以下です。

[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Restart=always

[Install]
WantedBy=multi-user.target

Assistant:

はい、可能です。以下の手順で、init.dスクリプトを作成してvpnserverを起動することができます。

  1. init.dディレクトリを作成します。
mkdir -p $PREFIX/etc/init.d
  1. init.dスクリプトを作成します。
vi $PREFIX/etc/init.d/vpnserver
  1. スクリプトを以下のように編集します。
#!/bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start SoftEther VPN Server
# Description:       SoftEther VPN Server is a powerful and easy-to-use VPN server software.
### END INIT INFO

# set PATH and LD_LIBRARY_PATH variables
export PATH=$PATH:/usr/local/vpnserver
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/vpnserver

case "$1" in
  start)
    /usr/local/vpnserver/vpnserver start
    ;;
  stop)
    /usr/local/vpnserver/vpnserver stop
    ;;
  restart)
    /usr/local/vpnserver/vpnserver stop
    /usr/local/vpnserver/vpnserver start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0
  1. スクリプトを実行可能にします。
chmod +x $PREFIX/etc/init.d/vpnserver
  1. サービスを起動します。
/etc/init.d/vpnserver start

これで、vpnserverを起動するためのinit.dスクリプトが作成され、起動されました。ただし、このスクリプトは、サーバーの起動が絶対に成功することを保証するものではありません。詳細については、SoftEther VPN Serverの公式ドキュメントを参照してください。

User: すいません教えてください。
mkdir -p $PREFIX/etc/init.d
の$PREFIXはどういういみでしょう?

Assistant:

$PREFIXはTermuxでインストールされたパッケージのインストール先のルートディレクトリを示します。通常、$PREFIX/data/data/com.termux/files/usrとなっています。

これは、Androidのセキュリティ機能により、Termuxにインストールされたパッケージが、Androidの他の部分や他のアプリケーションからアクセスできないようにするために使用されます。/data/dataディレクトリ内の各アプリケーションは、他のアプリケーションからアクセスできないようにシールドされています。

したがって、mkdir -p $PREFIX/etc/init.dのコマンドは、Termuxのインストール先である/data/data/com.termux/files/usr内にetc/init.dディレクトリを作成するために使用されます。このように、init.dスクリプトを適切な場所に配置することができます。

User: なるほどなるほど。では、Termuxの中にubuntuをインストールしていて、そのubuntuで動かす場合はvi /etc/init.d/vpnserver でよさそうでしょうか?

Assistant:

はい、UbuntuをTermuxで実行している場合でも同じように作成することができます。以下の手順で、Ubuntu上でinit.dスクリプトを作成してvpnserverを起動することができます。

  1. init.dディレクトリを作成します。
sudo mkdir -p /etc/init.d/
  1. init.dスクリプトを作成します。
sudo vi /etc/init.d/vpnserver
  1. スクリプトを以下のように編集します。
#!/bin/sh
### BEGIN INIT INFO
# Provides:          vpnserver
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start SoftEther VPN Server
# Description:       SoftEther VPN Server is a powerful and easy-to-use VPN server software.
### END INIT INFO

# set PATH and LD_LIBRARY_PATH variables
export PATH=$PATH:/usr/local/vpnserver
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/vpnserver

case "$1" in
  start)
    /usr/local/vpnserver/vpnserver start
    ;;
  stop)
    /usr/local/vpnserver/vpnserver stop
    ;;
  restart)
    /usr/local/vpnserver/vpnserver stop
    /usr/local/vpnserver/vpnserver start
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0
  1. スクリプトを実行可能にします。
sudo chmod +x /etc/init.d/vpnserver
  1. サービスを起動します。
sudo service vpnserver start

これで、Ubuntu上でinit.dスクリプトを作成してvpnserverを起動することができました。

User: なるほど。すでに起動されているのでこのメッセージは問題ないようです。
service vpnserver start
SoftEther VPN Server service has been already started.
Run the “vpnserver stop” command to stop this service.
所でこれは再起動時にも自動で起動されるのでしょうか?どうも古いinit.dには詳しくないもので。

Assistant:

はい、init.dスクリプトを使用する場合、システムが起動した後に自動的にVPNサーバーを起動するように設定することができます。この場合、Ubuntuが再起動したときにVPNサーバーが自動的に起動するようになります。

具体的には、init.dスクリプトを/etc/init.d/ディレクトリに配置し、sudo update-rc.d vpnserver defaultsコマンドを実行します。
このコマンドを実行することで、VPNサーバーが自動的に起動/停止するために必要なSystem Vランレベルのシンボリックリンクが作成されます。

なお、update-rc.dコマンドについては、Ubuntu 16.04以降では、Systemdの導入により代替手段が提供されており、不要になっています。しかし、init.dスクリプトを使用する場合は、このコマンドを使用することができます。

User: update-rc.d vpnserver defaults を行ったので、再起動後にも自動でVPNが起動するはず?かな?

Assistant:

はい、update-rc.dコマンドを実行することで、VPNサーバーを自動的に起動するために必要なシンボリックリンクが作成されます。したがって、Ubuntuを再起動した場合でも、VPNサーバーが自動的に起動するようになります。

ただし、systemdが使用されている場合(Ubuntu 16.04以降)は、/etc/init.d/ディレクトリにはSystemdのサービスユニットファイルを配置する必要があります。その場合は、sudo systemctl enable vpnserver.serviceコマンドを使用して、Systemdの自動起動設定を行う必要があります。

init.dスクリプトを使用している場合、シンボリックリンクが正しく作成されていることを確認するために、以下のコマンドを実行することができます:

ls -l /etc/rc*/*vpnserver

このコマンドを実行すると、以下のように出力されるはずです:

lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc0.d/K01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc1.d/K01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc2.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc3.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc4.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc5.d/S01vpnserver -> ../init.d/vpnserver
lrwxrwxrwx 1 root root 18 Apr 13 11:23 /etc/rc6.d/K01vpnserver -> ../init.d/vpnserver

この出力には、システムランレベルごとに作成されたシンボリックリンクが含まれています。S01の接頭辞は、システム起動時に実行されるスクリプトを示し、K01の接頭辞は、システムがシャットダウンされるときに実行されるスクリプトを示します。したがって、VPNサーバーが自動的に起動するように設定されていることがわかります。

 

2023-04-06

以下、ChatGPTとの会話。

ーーーーーーーー

**User**: Turmuxについて伺います。起動時に以下のコマンドを実行させたいです。方法を教えてください。
cd ./ubuntu-in-termux && ./startubuntu.sh

**Assistant**: Turmuxを使用して以下のコマンドを起動時に自動的に実行させる方法はあります。

1. Turmuxを開く
2. ツールバーのアイコンから新しいターミナルを開いてください。
3. ターミナルに以下のコマンドを入力してEnterを押します。

“`
termux-setup-storage
“`

このコマンドは、Turmuxのストレージ権限をリクエストするものです。

4. 次に、以下のコマンドを実行して、 `~/.bashrc` ファイルを開きます。

“`
nano ~/.bashrc
“`

5. ファイルの下部に移動し、以下のコマンドを追加します。

“`
(cd /data/data/com.termux/files/home/ubuntu-in-termux && ./startubuntu.sh)
“`

6. `Ctrl` + `O` を押して変更を保存し、 `Ctrl` + `X` を押してnanoエディタを終了します。

7. 最後に、以下のコマンドを実行して変更を反映します。

“`
source ~/.bashrc
“`

これで、次回Turmuxを開いたときに自動的に指定されたコマンドが実行されます。

ーーーーーーーー

はい、ルーティングを指定することで、AnyDesk VPNクライアントが192.168.1.*のネットワークにアクセスできるようにすることができます。以下は、Windowsコマンドプロンプトを使用して、AnyDesk VPN接続を持つクライアントが192.168.1.*のネットワークにアクセスするための手順です。

1. コマンドプロンプトを管理者として開きます。
2. `route print` と入力し、Enterキーを押します。これは現在のルーティングテーブルを表示します。
3. `route add 192.168.1.0 mask 255.255.255.0 192.168.50.2 metric 10 if 1` と入力します。ここで、192.168.1.0はAnyDesk VPNサーバーに接続するネットワーク、255.255.255.0はサブネットマスク、192.168.50.2はAnyDesk VPNサーバーのIPアドレス、10は優先度、1はデフォルトのインターフェイス(ここではInternetにアクセスするためのインターフェイス)を指定します。
4. `route print` を再度入力し、Enterキーを押します。ルーティングテーブルに設定されたルートが表示されます。

これで、AnyDesk VPN接続を持つクライアントが192.168.1.*のネットワークにアクセスすることができます。ただし、この手順を実行する前に、管理者アクセス権限を持つコマンドプロンプトで実行して、間違った設定を避けるようにしてください。

ーーーーーーーー

 

2023-04-03

ここまでやっていたけど、TermuxにUbuntuをインストールした方が良いかもしれないな。
Ubuntuの方がいろいろと情報が多い。
参考

Softetherのインストールを完了しました。

こちらを参考にさせていただきました。

 

一通り完了。接続OK.

2023-04-03

termuxでサーバーを作った方がルーターの機能を頼るよりも融通が利いていい気がします。

Buffaloだとno-ipしか更新できないし。どうも動作が怪しいので。

取りあえずのソース


 1 #!/usr/bin/env bash
  2 cd `dirname $0`
  3 
  4 function update_ddns() {
  5     source ./ddns_lists.sh
  6     freedns_afraid_org
  7     #https://github.com/mdmower/bash-no-ip-updater
  8     bash bash-no-ip-updater/noipupdater.sh
  9 }
 10 
 11 
 12 # IPアドレスの取得
 13 IP=$(curl -s https://api.ipify.org)
 14 UPD_FLG=0
 15 BODY_TXT=""
 16 force_update_interval=14 # 強制更新の間隔(日数)
 17 
 18 
 19 # 現在日時を取得します
 20 now=$(date +%s)
 21 
 22 
 23 # 前回のIPアドレスのチェック
 24 if [ -f "ip.txt" ]; then
 25   OLD_IP=$(cat ip.txt)
 26 else
 27   OLD_IP=""
 28 fi
 29 
 30 
 31 
 32 # IPアドレスが変更された場合に更新
 33 if [ "$IP" != "$OLD_IP" ]; then
 34   update_ddns
 35   UPD_FLG=1
 36   echo "$IP" > ip.txt
 37   echo "Update complete by IP change."
 38   echo $now > last_update_date
 39   
 40   BODY_TXT=$BODY_TXT"\nUpdate complete by IP change."
 41 else
 42   echo "IP address has not changed."
 43   BODY_TXT=$BODY_TXT"\nIP address has not changed."
 44 fi
 45 
 46 
 47 if [ "$UPD_FLG" != 1 ]; then
 48   # 最終更新日時をファイルから読み込みます
 49   last_update_date=$(cat last_update_date 2>/dev/null || echo 0)
 50   
 51   # 現在日時を取得します
 52   force_update=$(expr $now - $last_update_date \> $((force_update_interval * 24 * 60 * 60)))
 53   if [ "$force_update" -eq 1 ]; then
 54     update_ddns
 55     UPD_FLG=1
 56     echo $now > last_update_date
 57     echo "Update complete by time base."
 58     BODY_TXT=$BODY_TXT"\nUpdate complete by time base."
 59   fi
 60 
 61 fi
 62 
 63 if [ "$UPD_FLG" != 0 ]; then
 64   echo -e "Subject: DDNS更新!\n\n$BODY_TXT" | msmtp address@gmail.com
 65 fi
 66 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です