膝の上にあるDynDNS

あなたがウェブ開発者だとしましょう。 24時間365日稼働するLinuxホームコンピューターと動的外部IPがあるとします。 ssh経由でそれに接続するか、何らかの理由で長時間またはまったくホストするためにレイアウトすることができないWebプロジェクトを顧客に表示する必要があると仮定します(サードパーティに何かを表示する必要があるため、VPNはオプションではありません)。 DynDNSサービスに満足していないとしましょう。 始めましょう。



私は同意します、条件は特定のものです-しかし、人生で起こらないこと。



スキームはほぼ同じです-自宅のPCがあなたのサイトをノックしています(あなたは結局ウェブ開発者です、あなたはサイトを持っているべきです)、それはIPアドレスを修正してあなたにそれを与えます。



最初に、外部ネットワークへのホームPC(以降、簡単にするためにサーバーと呼びます)の出力(実際には入力)を構成します。 PCでインターネットを直接見る場合は、この点をスキップしてください。 これは、代替のtomatoUSBファームウェアを備えたASUS WL-520GUルーターのWebインターフェイスを介したセットアップのようなものです-ルーターでssh転送するためにポート666を開き、Webリクエストをサーバーに転送するためにポート667を開きます(内部アドレスは192.168.1.100で、IPアドレスはルールによってサーバーに固定されます同じルーターのDHCP)。







一部のルーターを再起動する必要がありますが、高い確率で、ルーター自体がこれを報告します。



ホスティングのページのcron(たとえば、http://my.site/testippage.php)を照会するようにサーバーを構成することは残ります。



コンソールで-

crontab -e */5 * * * * wget http://my.site/testippage.php?key=habrahabr -O /dev/null
      
      





(5分ごとにmy.site/testippage.phpをどこにもダウンロードしません)



getリクエストによって送信されるキーは、偶発的または意図的な妨害行為に対する小さな保護として機能します。



次に、サーバー側を構成します。 以前はMySQLデータベースを使用して現在のIPアドレスを保存していましたが、これは完全に不要であり、記事を編集する過程で次のコードを取得しました。

 <?php if($_GET['key']=='habrahabr'){ file_put_contents ( 'ip.txt' , getenv("REMOTE_ADDR")); } else { $ip = file_get_contents('ip.txt'); if (isset($_GET['page'])){ header('Location: http://'.$ip.':667/'.$_GET['page']); } else { echo $ip; } } ?>
      
      







コードからわかるように、getパラメーターがスクリプトに渡されると、ノッカーのIPが記録されます。ページパラメーターがホームコンピューターにリダイレクトされる場合、何も返されない場合は、単にIPアドレスが表示されます。



サーバーのプロジェクトフォルダーにあるプロジェクトを顧客に表示するには、リンクmy.site/testippage.php?page=projectを顧客に提供する必要があります。



最後の部分は、1つのコマンドでサーバーに接続するようにラップトップを構成することです。 homeslackconnect.shと言うスクリプトを作成しましょう。

 content=$(wget http://my.site/testippage.php -q -O -) ssh $content -p 666 -l niph
      
      





ipアドレスを変数コンテンツに読み込み、niphユーザーとしてポート666を介して受信アドレスに接続しようとします。 もともと必要でした。



私はDynDNSがはるかに単純なソリューションであるとは言いませんが、すべてのルーターが無料のDynDNSサーバーを使用できるわけではありません。さらに、無料ではなくなる傾向があり、そのソリューションは常に暖かくなります。 コメントで質問してください。このソリューションがあなたの人生を簡素化するのに役立つことを願っています。



All Articles