Debian9でPageKiteフロントエンドサーバーを設定する方法
著者は、 Open Internet / Free Speech Fund を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
プライベートネットワークは通常、 NAT (ネットワークアドレス変換)を使用してホストへのインターネットアクセスを提供し、プライベートネットワーク内のすべてのホストと単一のパブリックIPアドレスを共有します。 NATシステムでは、プライベートネットワーク内のホストはネットワーク外からは見えません。 これらのホストで実行されているサービスをパブリックインターネットに公開するには、通常、ゲートウェイでNATルールを作成します。これは一般にポート転送ルールと呼ばれます。 ただし、いくつかの状況では、これらのルールを構成するためのゲートウェイにアクセスできません。 このような状況では、PageKiteのようなトンネリングソリューションが役立ちます。
PageKite は、ポート転送を必要とせずにプライベートネットワーク内のサービスをパブリックインターネットに公開できる、高速で安全なトンネリングソリューションです。 これを行うには、フロントエンドサーバーと呼ばれる外部サーバーに依存します。このサーバーには、NATの背後にあるサーバーとクライアントが接続して、それらの間の通信を許可します。 デフォルトでは、PageKiteは独自の商用 pagekite.net サービスを使用しますが、完全にオープンソースのプロジェクトであるため、[X207Xなどの公的にアクセス可能なホストにプライベートフロントエンドをセットアップできます。 ]DigitalOceanドロップレット。 この設定により、NATの背後にあるホストへのリモートアクセスのためのベンダーに依存しないソリューションを作成できます。 フロントエンドに接続するようにPageKiteクライアントでリモートホストを構成し、SSHポートを公開することにより、SSHを使用してコマンドラインインターフェイスシェルを介してリモートホストにアクセスできます。 SSH接続で実行されているVNCやRDPなどのデスクトップ共有システムを使用して、グラフィカルユーザーインターフェイスにアクセスすることもできます。
このチュートリアルでは、Debian9を実行しているサーバーにPageKiteフロントエンドサービスをインストールしてセットアップします。 また、ローカル環境とリモート環境をシミュレートするために、さらに2台のDebian9サーバーをセットアップします。 終了したら、複数のクライアント用のサーバーをセットアップし、SSHとVNCを使用したリモートアクセスの実用的なソリューションでテストします。
前提条件
このガイドに従う前に、次のものが必要です。
- チュートリアルで使用するドロップレットを設定するためのDigitalOceanアカウント。
- フロントエンドサーバーとして機能するパブリックIPアドレスを使用してDebian9を実行しているサーバー。Debian9を使用した初期サーバーセットアップガイドに従ってセットアップします。 1GBのメモリを備えた標準のDigitalOceanDropletは、テスト目的または接続数が少ないアプリケーションには十分です。 このサーバーをホスト名
front-end-serverで参照し、そのパブリックIPアドレスをFront_End_Public_IPで参照します。 - Debian 9を使用した初期サーバーセットアップガイドに従ってセットアップされた、PageKiteサービスを使用して接続するリモートホストとローカルホストの役割を果たすDebian9を実行している2つのホスト。 NATを介してインターネットにアクセスできるリモートホストには、ローカルホストがPageKiteトンネルを使用してアクセスします。 リモートホストとローカルホストは、ホスト名
remote-hostとlocal-hostで参照され、それらのパブリックIPアドレスはそれぞれRemote_Host_Public_IPとLocal_Host_Public_IPで参照されます。 このチュートリアルでは、1GBのメモリを備えた2つの標準DigitalOceanドロップレットを使用してそれらを表現します。 または、2台のローカルマシンまたは仮想マシンを使用してこれらのホストを表すこともできます。 - 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例として
your_domainを使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
pagekite.your_domainがfront-end-serverのIPアドレスを指しているAレコード。- また、
pagekite.your_domainで終わるすべてのドメインがfront-end-serverを指すようにDNSを設定する必要があります。 これは、ワイルドカードDNSエントリを使用して設定できます。 この場合、ワイルドカードDNSエントリ*.pagekite.your_domainのAレコードを作成して、同じIPアドレスFront_End_Public_IPを指し示します。 これは、ドメイン名(client-1.pagekite.your_domainやclient-2.pagekite.your_domainなど)でサーバーに接続するクライアントを区別し、要求を適切にトンネリングするために使用されます。 - SSHトンネルを介したVNC接続をサポートするVNCクライアントがインストールされたローカルコンピューター。 Windowsでは、TightVNC、RealVNC、またはUltraVNCを使用できます。 macOSでは、組み込みの画面共有プログラムを使用することも、RealVNCなどのクロスプラットフォームアプリを使用することもできます。 Linuxでは、vinagre、krdc、RealVNC、TightVNCなどの多くのオプションから選択できます。
ステップ1—サーバーのセットアップ
このチュートリアルでは、3つのDigitalOceanドロップレットを使用して、front-end-server、local-host、およびremote-hostの役割を果たします。 これを行うには、最初にlocal-hostとremote-hostを設定して、グラフィカル環境にアクセスし、NATでのremote-hostの動作を模倣します。そのサービスにアクセスするためのソリューションとして使用されます。 さらに、front-end-serverドロップレットファイアウォールルールを構成して、PageKiteと連携し、local-hostとremote-hostの間の接続を仲介できるようにする必要があります。
複数のサーバーで作業するため、次のように、コマンドリストでさまざまな色を使用して、使用しているサーバーを識別します。
# Commands and outputs in the front-end-server Droplet
# Commands and outputs in the remote-host Droplet
# Commands and outputs in the local-host Droplet
# Commands and outputs in both the remote-host and local-host Droplets
まず、remote-hostとlocal-hostの両方のドロップレットの手順を実行して、依存関係をインストールし、VNCを使用してグラフィカル環境へのアクセスを設定しましょう。 その後、front-end-serverがPageKiteを実行し、remote-hostでNATを使用した接続を模倣できるように、3つのドロップレットのそれぞれでファイアウォール構成について説明します。
依存関係のインストール
このデモを実行するには、local-hostホストとremote-hostホストの両方のグラフィカルインターフェイスにアクセスする必要があります。 local-hostでは、VNCセッションを使用してグラフィカルインターフェイスにアクセスし、ブラウザーを使用してセットアップをテストします。 remote-hostで、local-hostからアクセスするVNCセッションを設定します。
VNCをセットアップするには、最初にlocal-hostとremote-hostにいくつかの依存関係をインストールする必要があります。 ただし、パッケージをインストールする前に、両方のサーバーで次のコマンドを実行して、リポジトリのパッケージリストを更新する必要があります。
sudo apt-get update
次に、VNCサーバーとグラフィカルユーザー環境をインストールします。これは、VNCセッションを開始するために必要です。 TightVNCサーバーとXfceデスクトップ環境を使用します。これらは、以下を実行してインストールできます。
sudo apt-get install xfce4 xfce4-goodies tightvncserver
グラフィカル環境のインストールの途中で、使用するキーボードレイアウトについて尋ねられます。 QWERTY USキーボードの場合は、English (US)を選択します。
これらに加えて、local-hostでは、remote-hostへの接続を実行できるように、VNCビューアーとインターネットブラウザーが必要になります。 このチュートリアルでは、FirefoxWebブラウザとxtightvncviewerをインストールします。 それらをインストールするには、以下を実行します。
sudo apt-get install firefox-esr xtightvncviewer
グラフィカル環境がインストールされている場合、システムはデフォルトでグラフィカルモードで初期化されます。 DigitalOceanコンソールを使用すると、グラフィカルログインマネージャを視覚化できますが、ログインしたり、コマンドラインインターフェイスを使用したりすることはできません。 このセットアップでは、NATを使用しているかのようにネットワークの動作を模倣しています。 これを行うには、SSHを使用して接続できないため、DigitalOceanコンソールを使用する必要があります。 したがって、起動時にグラフィカルユーザーインターフェイスが自動的に起動しないようにする必要があります。 これは、両方のサーバーでログインマネージャーを無効にすることで実行できます。
sudo systemctl disable lightdm.service
ログインマネージャを無効にした後、Dropletsを再起動し、DigitalOceanコンソールを使用してログインできるかどうかをテストできます。 これを行うには、次を実行します。
sudo shutdown -r now
次に、DigitalOceanコントロールパネルの[Droplet]ページに移動し、local-host Dropletを選択し、右上隅にある Console という単語をクリックして、DigitalOceanコンソールにアクセスします。ドロップレットのオンとオフを切り替えます。
コンソールでEnterキーを押すと、ユーザー名とパスワードの入力を求められます。 次のクレデンシャルを入力して、コマンドラインプロンプトを表示します。
local-hostに対してこれを行ったら、remote-hostに対して繰り返します。
両方のドロップレットのコンソールを設定したら、VNCを設定できます。
VNCのセットアップ
ここでは、基本的なVNCセットアップをまとめます。 これを設定する方法のより詳細なガイドが必要な場合は、 Debian9にVNCをインストールして構成する方法のチュートリアルを確認してください。
VNCセッションを開始するには、local-hostとremote-hostの両方のドロップレットで以下を実行します。
vncserver
最初の実行時に、システムは構成ファイルを作成し、メインパスワードを要求します。 希望のパスワードを入力し、確認してください。 VNCサーバーは、別のユーザーのVNCセッションを表示するために使用される表示専用パスワードも要求します。 表示専用のVNCセッションは必要ないため、このプロンプトにはnと入力します。
出力は次のようになります。
Outputsammy@remote-host:/home/sammy$ vncserver You will require a password to access your desktops. Password: Verify: Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is remote-host:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/remote-host:1.log
ホスト名の後の:1は、VNCセッションの番号を表します。 デフォルトでは、セッション番号1はポート5901で実行され、セッション番号2はポート5902で実行されます。 前の出力に続いて、VNCクライアントを使用してポート5901のRemote_Host_Public_IPに接続することにより、remote-hostにアクセスできます。
以前の構成の問題の1つは、永続的ではないことです。つまり、ドロップレットを再起動したときにデフォルトで開始されません。 永続化するために、Systemdサービスを作成して有効にすることができます。 これを行うには、/etc/systemd/systemの下に[email protected]ファイルを作成します。これはnanoを使用して実行できます。
sudo nano /etc/systemd/system/[email protected]
次の内容をファイルに配置し、sammyを自分のユーザー名に置き換えます。
/etc/systemd/system/[email protected]
[Unit] Description=Start TightVNC server at startup After=syslog.target network.target [Service] Type=forking User=sammy PAMName=login PIDFile=/home/sammy/.vnc/%H:%i.pid ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i ExecStop=/usr/bin/vncserver -kill :%i [Install] WantedBy=multi-user.target
このファイルは、vncserver Systemdユニットを作成します。これは、systemctlツールを使用してシステムサービスとして構成できます。 この場合、サービスが開始されると、サービスがすでに実行されている場合はVNCセッションを強制終了し(行ExecStartPre)、1280x800に設定された解像度を使用して新しいセッションを開始します(行ExecStart)。 サービスが停止すると、VNCセッションが強制終了されます(ExecStop行)。
ファイルを保存してnanoを終了します。 次に、次のコマンドを実行して、システムに新しいユニットファイルを認識させます。
sudo systemctl daemon-reload
次に、サーバーが次のコマンドを実行して初期化されたときに、サービスが自動的に開始されるようにします。
sudo systemctl enable [email protected]
enableコマンドをsystemctlと一緒に使用すると、前のコマンドの出力で通知されるように、システムの初期化時にサービスが自動的に開始されるようにシンボリックリンクが作成されます。
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /etc/systemd/system/[email protected].
VNCサーバーが適切に構成されている場合、ドロップレットを再起動して、サービスが自動的に開始されるかどうかをテストできます。
sudo shutdown -r now
システムが初期化されたら、SSHを使用してログインし、VNCが次のコマンドで実行されているかどうかを確認します。
sudo systemctl status [email protected]
出力は、サービスが実行中であることを示します。
● [email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Thu 2019-08-29 19:21:12 UTC; 1h 22min ago Process: 848 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS) Process: 760 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Main PID: 874 (Xtightvnc) Tasks: 0 (limit: 4915) CGroup: /system.slice/system-vncserver.slice/[email protected] ‣ 874 Xtightvnc :1 -desktop X -auth /home/sammy/.Xauthority -geometry 1280x800 -depth 24 -rfbwait Aug 29 19:21:10 remote-host systemd[1]: Starting Start TightVNC server at startup... Aug 29 19:21:10 remote-host systemd[760]: pam_unix(login:session): session opened for user sammy by (uid=0) Aug 29 19:21:11 remote-host systemd[848]: pam_unix(login:session): session opened for user sammy by (uid=0) Aug 29 19:21:12 remote-host systemd[1]: Started Start TightVNC server at startup. ~
これでVNC構成は終了です。 remote-hostとlocal-hostの両方で前の手順に従うことを忘れないでください。 次に、各ホストのファイアウォール構成について説明します。
ファイアウォールの構成
remote-hostから、NATの背後からの動作を模倣するために、Dropletsのサービスへの外部接続を拒否するようにファイアウォールを構成します。 このチュートリアルでは、HTTP接続にポート8000、SSHに22、VNCに5901を使用するため、外部接続を拒否するようにファイアウォールを構成します。これらのポート。
Debian 9 の初期設定に従うことにより、remote-hostにはSSHへの接続を許可するファイアウォールルールがあります。 次のコマンドを実行して、このルールを確認できます。
sudo ufw status verbose
出力は次のようになります。
OutputStatus: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp (OpenSSH) ALLOW IN Anywhere 22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
これらのSSHルールを削除して、NATの背後にある動作を模倣します。
警告:ポート22を閉じると、SSHを使用してサーバーにリモートログインできなくなります。 ドロップレットの場合、この手順の依存関係のインストールセクションの最後で行ったように、 DigitalOceanコントロールパネルを介してサーバーのコンソールにアクセスできるため、これは問題ではありません。 ただし、Dropletを使用していない場合は、注意が必要です。ポート22を閉じると、他にアクセスする手段がない場合、サーバーからロックアウトされる可能性があります。
SSHアクセスを拒否するには、ufwを使用して次のコマンドを実行します。
sudo ufw delete allow OpenSSH
ファイアウォールのステータスを再度確認することで、SSHルールが削除されたことを確認できます。
sudo ufw status verbose
次のように、出力にはファイアウォールルールは表示されません。
OutputStatus: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip
ファイアウォールは構成されていますが、次の方法で有効にするまで、新しい構成は実行されません。
sudo ufw enable
有効にすると、コマンドの出力に記載されているように、SSH経由でremote-hostにアクセスできなくなることに注意してください。
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
remote-hostからログアウトし、SSHまたはVNC接続を確立して構成をテストします。 それは不可能です。 今後、DigitalOceanコンソールのみでremote-hostにアクセスできるようになります。
local-hostでは、SSHポートを開いたままにします。 VNCセッションへのアクセスを許可するために必要なファイアウォールルールは1つだけです。
sudo ufw allow 5901
ファイアウォールルールを変更した後、次を実行して有効にします。
sudo ufw enable
これで、ローカルマシンの前提条件のVNCクライアントを使用してVNC接続をテストし、設定したVNCパスワードを使用してポート5901のlocal-hostに接続できます。
これを行うには、VNCクライアントを開き、Local_Host_Public_IP:5901に接続します。 パスワードを入力すると、VNCセッションに接続します。
注: VNCセッションへの接続に問題がある場合は、local-hostでsudo systemctl restart vncserver@1を使用してVNCサービスを再起動し、接続を再試行してください。
Xfceは最初の起動時に、環境の初期設定について質問します。
このチュートリアルでは、デフォルトの構成を使用オプションを選択します。
最後に、PageKiteが使用するfront-end-serverのポート80への接続を許可する必要があります。 front-end-serverでターミナルを開き、次のコマンドを使用します。
sudo ufw allow 80
さらに、HTTPSのポート443でトラフィックを許可します。
sudo ufw allow 443
新しいファイアウォール構成を有効にするには、次のコマンドを実行します。
sudo ufw enable
ドロップレットを設定したので、PageKiteフロントエンドサーバーを構成しましょう。
ステップ2—フロントエンドサーバーへのPageKiteのインストール
Pythonスクリプトを使用してPageKiteを実行してフロントエンドサーバーをセットアップすることは可能ですが、システムサービスを使用して実行する方が信頼性が高くなります。 そのためには、サーバーにPageKiteをインストールする必要があります。
Debianサーバーにサービスをインストールするための推奨される方法は、配布パッケージを使用することです。 このようにして、自動更新を取得し、起動時に起動するようにサービスを構成することができます。
まず、PageKiteをインストールするようにリポジトリを構成します。 これを行うには、リポジトリのパッケージリストを更新します。
sudo apt-get update
更新が完了したら、パッケージ dirmngr をインストールします。これは、安全なインストールを保証するために、PageKiteリポジトリからのキーリングのインポートをサポートするために必要です。
sudo apt-get install dirmngr
次に、次のコマンドを実行して、リポジトリを/etc/apt/sources.listファイルに追加します。
echo deb http://pagekite.net/pk/deb/ pagekite main | sudo tee -a /etc/apt/sources.list
リポジトリを設定したら、PageKiteパッケージキーを信頼できるキーのセットにインポートして、このリポジトリからパッケージをインストールできるようにします。 パッケージ化キーの管理は、apt-keyユーティリティを使用して行われます。 この場合、キーサーバーkeys.gnupg.netからキーAED248B1C7B2CAC3をインポートする必要があります。これは、次のコマンドを実行することで実行できます。
sudo apt-key adv --recv-keys --keyserver keys.gnupg.net AED248B1C7B2CAC3
次に、リポジトリのパッケージリストを再度更新して、pagekiteパッケージのインデックスが作成されるようにします。
sudo apt-get update
最後に、次のコマンドでインストールします。
sudo apt-get install pagekite
PageKiteがインストールされたので、フロントエンドサーバーをセットアップし、起動時に実行するようにサービスを構成しましょう。
手順3—フロントエンドサーバーの構成
インストールしたばかりのPageKiteパッケージを使用して、PageKiteフロントエンドサーバーへの接続を構成できます。 また、PageKite接続を受信するためのフロントエンドサービスを設定するためにも使用できます。これは、ここで実行したいことです。 そのためには、PageKiteの構成ファイルを編集する必要があります。
PageKiteは、その構成ファイルをディレクトリ/etc/pagekite.dに保存します。 最初に行う必要のある変更は、/etc/pagekite.d/10_account.rcファイルのすべての行を無効にすることです。このファイルは、PageKiteがフロントエンドサーバーに接続するクライアントとして設定されている場合にのみ使用されるためです。 nanoを使用してファイルを編集できます。
sudo nano /etc/pagekite.d/10_account.rc
行を無効にするには、#を追加して、ファイルのアクティブな行を無効にします。
/etc/pagekite.d/10_account.rc
#################################[ This file is placed in the Public Domain. ]# # Replace the following with your account details. # kitename = NAME.pagekite.me # kitesecret = YOURSECRET # Delete this line! # abort_not_configured
変更を加えたら、それらを保存してnanoを終了します。 次に、ファイル/etc/pagekite.d/20_frontends.rcを編集します。
sudo nano /etc/pagekite.d/20_frontends.rc
次の強調表示された行をファイルに追加し、defaults行をコメントアウトします。必ず、your_domainを使用しているドメイン名に置き換え、examplepasswordを選択したパスワードに置き換えてください。 :
/etc/pagekite.d/20_frontends.rc
#################################[ This file is placed in the Public Domain. ]# # Front-end selection # # Front-ends accept incoming requests on your behalf and forward them to # your PageKite, which in turn forwards them to the actual server. You # probably need at least one, the service defaults will choose one for you. # Use the pagekite.net service defaults. # defaults # If you want to use your own, use something like: # frontend = hostname:port # or: # frontends = COUNT:dnsname:port isfrontend ports=80,443 protos=http,https,raw domain=http,https,raw:*.pagekite.your_domain:examplepassword rawports=virtual
これらの行を1つずつ説明しましょう。 まず、PageKiteをフロントエンドサーバーとして構成するために、isfrontendという行を追加しました。 サーバーがリッスンするポートを構成するために、ports=80,443を追加しました。 また、PageKiteがプロキシするプロトコルも構成しました。 HTTP、HTTPS、およびRAW(SSH接続で使用される)を使用するには、protos=http,https,rawという行を追加します。 また、defaults設定を無効にして、サーバーの構成が競合しないようにします。
さらに、front-end-serverに使用するドメインを構成しました。 クライアントごとにサブドメインが使用されるため、前提条件セクションでDNS構成が必要でした。 また、クライアントの認証に使用されるパスワードを設定します。 プレースホルダーパスワードexamplepasswordを使用して、これらの構成はdomain=http,https,raw:*.pagekite.your_domain:examplepassword行を追加することによって行われました。 最後に、SSHを使用して接続するために追加の行を追加しました(ここで説明されているように、文書化されていません):rawports=virtual。
ファイルを保存してnanoを終了します。 次のコマンドを実行して、PageKiteサービスを再起動します。
sudo systemctl restart pagekite.service
次に、起動時に次のコマンドで起動できるようにします。
sudo systemctl enable pagekite.service
front-end-serverが実行されたので、remote-hostのHTTPポートを公開し、local-hostから接続してテストしてみましょう。
ステップ4—NATの背後にあるホストに接続する
front-end-serverをテストするには、remote-hostでHTTPサービスを開始し、PageKiteを使用してインターネットに公開し、local-hostから接続できるようにします。 着信SSH接続を拒否するようにファイアウォールを構成したため、DigitalOceanコンソールを使用してremote-hostに接続する必要があることを忘れないでください。
テスト用にHTTPサーバーを起動するには、Python 3http.serverモジュールを使用できます。 Pythonは最小限のDebianインストールにもすでにインストールされており、http.serverは標準のPythonライブラリの一部であるため、remote-hostのポート8000を使用してHTTPサーバーを起動します。 :
python3 -m http.server 8000 &
Debian9はデフォルトでPython2を引き続き使用するため、サーバーを起動するにはpython3を実行してPythonを呼び出す必要があります。 末尾の&文字は、コマンドがバックグラウンドで実行されることを示しているため、シェルターミナルを引き続き使用できます。 出力は、サーバーが実行中であることを示します。
Outputsammy@remote-host:~$ python3 -m http.server 8000 & [1] 1782 sammy@remote-host:~$ Serving HTTP on 0.0.0.0 port 8000 ...
注:この出力に表示される番号1782は、このコマンドで開始されたプロセスに割り当てられたIDを示しており、実行によって異なる場合があります。 バックグラウンドで実行されているため、このIDを使用して、kill -9 1782を発行することでプロセスを終了(強制終了)できます。
HTTPサーバーが実行されている状態で、PageKiteトンネルを確立できます。 これを行う簡単な方法は、pagekite.pyスクリプトを使用することです。 実行中のremote-hostにダウンロードできます。
wget https://pagekite.net/pk/pagekite.py
ダウンロードした後、次のコマンドを実行して実行可能としてマークします。
chmod a+x pagekite.py
注:PageKiteはPython2で記述されており、これはDebian 9のPythonの現在のデフォルトバージョンであるため、続行するコマンドはエラーなしで機能します。 ただし、デフォルトのPythonはいくつかのLinuxディストリビューションでPython 3に段階的に移行されているため、pagekite.pyスクリプトの最初の行を変更して、Python 2で実行するように設定する(#!/usr/bin/python2)。
現在のディレクトリでpagekite.pyが使用可能になっているので、front-end-serverに接続し、your_domainを置き換えて次を実行することにより、ドメインremote-host.pagekite.your_domainでHTTPサーバーを公開できます。 examplepassword独自の資格情報:
./pagekite.py --clean --frontend=pagekite.your_domain:80 --service_on=http:remote-host.pagekite.your_domain:localhost:8000:examplepassword
このコマンドの引数を見てみましょう。
--cleanは、デフォルト構成を無視するために使用されます。--frontend=pagekite.your_domain:80は、フロントエンドのアドレスを指定します。 手順3でフロントエンドをこのポートで実行するように設定したため、ポート80を使用していることに注意してください。- 最後の引数
--service_on=http:remote-host.pagekite.your_domain:localhost:8000:examplepasswordでは、公開するサービス(http)、使用するドメイン(remote-host.pagekite.your_domain)、ローカルアドレスを設定します。サービスが実行されているポート(localhost:8000、PageKiteへの接続に使用しているのと同じホストでサービスを公開しているため)、およびフロントエンドに接続するためのパスワード(examplepassword)。
このコマンドを実行すると、コンソールにKites are flying and all is wellというメッセージが表示されます。 その後、local-host VNCセッションでブラウザウィンドウを開き、アドレスhttp://remote-host.pagekite.your_domainにアクセスしてremote-host上のHTTPサーバーにアクセスすることができます。 これにより、remote-hostのファイルシステムが表示されます。
remote-hostでPageKiteの接続を停止するには、remote-hostコンソールでCTRL+Cを押します。
front-end-serverをテストしたので、PageKiteとの接続を永続化し、起動時に開始するようにremote-hostを構成しましょう。
ステップ5—ホスト構成を永続化する
手順4で設定したremote-hostとfront-end-serverの間の接続は永続的ではありません。つまり、サーバーの再起動時に接続が再確立されることはありません。 このソリューションを長期間使用したい場合、これは問題になるので、このセットアップを永続的にしましょう。
PageKiteをremote-hostでサービスとして実行するように設定して、起動時に開始することができます。 これを行うには、手順3でfront-end-serverに使用したものと同じ配布パッケージを使用できます。 DigitalOceanコントロールパネルからアクセスするremote-hostコンソールで、次のコマンドを実行してdirmngrをインストールします。
sudo apt-get install dirmngr
次に、PageKiteリポジトリを追加し、GPGキーをインポートするには、次のコマンドを実行します。
echo deb http://pagekite.net/pk/deb/ pagekite main | sudo tee -a /etc/apt/sources.list sudo apt-key adv --recv-keys --keyserver keys.gnupg.net AED248B1C7B2CAC3
パッケージリストを更新してPageKiteをインストールするには、次のコマンドを実行します。
sudo apt-get update sudo apt-get install pagekite
PageKiteをクライアントとして設定するには、ファイル/etc/pagekite.d/20_frontends.rcでfront-end-serverアドレスとポートを構成します。 nanoを使用して編集できます。
sudo nano /etc/pagekite.d/20_frontends.rc
このファイルでは、pagekite.netサービスのデフォルトを使用しないように、defaultsで行をコメント化します。 また、パラメータfrontendを使用して、front-end-serverアドレスとポートを構成し、ファイルの最後にfrontend = pagekite.your_domain:80行を追加します。 必ずyour_domainを使用しているドメインに置き換えてください。
編集した行が強調表示された完全なファイルは次のとおりです。
/etc/pagekite.d/20_frontends.rc
#################################[ This file is placed in the Public Domain. ]#
# Front-end selection
#
# Front-ends accept incoming requests on your behalf and forward them to
# your PageKite, which in turn forwards them to the actual server. You
# probably need at least one, the service defaults will choose one for you.
# Use the pagekite.net service defaults.
# defaults
# If you want to use your own, use something like:
frontend = pagekite.your_domain:80
# or:
# frontends = COUNT:dnsname:port
変更を保存してnanoを終了した後、ファイル/etc/pagekite.d/10_account.rcを編集し、front-end-serverに接続するための資格情報を設定して構成を続行します。 まず、次のコマンドを実行してファイルを開きます。
sudo nano /etc/pagekite.d/10_account.rc
ドメインを設定するには、ドメイン名とパスワードを使用してfront-end-serverに接続し、パラメーターkitenameとkitesecretをそれぞれ編集します。 次に強調表示されているように、構成を有効にするには、ファイルの最後の行もコメントアウトする必要があります。
/etc/pagekite.d/10_account.rc
#################################[ This file is placed in the Public Domain. ]# # Replace the following with your account details. kitename = remote-host.pagekite.your_domain kitesecret = examplepassword # Delete this line! # abort_not_configured
保存して、テキストエディタを終了します。
次に、インターネットに公開されるサービスを構成します。 HTTPおよびSSHサービスの場合、PageKiteの構成ディレクトリ/etc/pagekite.dには、拡張子が.sampleで終わるサンプル構成ファイルが含まれています。 サンプル構成ファイルをHTTP用の有効なファイルにコピーすることから始めましょう。
cd /etc/pagekite.d sudo cp 80_httpd.rc.sample 80_httpd.rc
HTTP構成ファイルはほぼセットアップされています。 HTTPポートを調整するだけで済みます。これは、コピーしたファイルを編集することで実行できます。
sudo nano /etc/pagekite.d/80_httpd.rc
パラメータservice_onは、公開するサービスのアドレスとポートを定義します。 デフォルトでは、localhost:80を公開します。 HTTPサーバーはポート8000で実行されるため、次に強調表示するように、ポート番号を変更する必要があります。
/etc/pagekite.d/80_httpd.rc
#################################[ This file is placed in the Public Domain. ]# # Expose the local HTTPD service_on = http:@kitename : localhost:8000 : @kitesecret # If you have TLS/SSL configured locally, uncomment this to enable end-to-end # TLS encryption instead of relying on the wild-card certificate at the relay. #service_on = https:@kitename : localhost:443 : @kitesecret # # Uncomment the following to globally DISABLE the request firewall. Do this # if you are sure you know what you are doing, for more details please see # <http://pagekite.net/support/security/> # #insecure # # To disable the firewall for one kite at a time, use lines like this:: # #service_cfg = KITENAME.pagekite.me/80 : insecure : True
注: service_onパラメーターの構文は、pagekite.pyスクリプトで使用されるものと似ています。 ただし、使用するドメイン名とパスワードは/etc/pagekite.d/10_account.rcファイルから取得され、それぞれマーカー@kitenameと@kitesecretによって挿入されます。
この構成ファイルへの変更を保存した後、変更を有効にするためにサービスを再起動する必要があります。
sudo systemctl restart pagekite.service
起動時にサービスを開始するには、次のコマンドでサービスを有効にします。
sudo systemctl enable pagekite.service
以前と同じように、http.serverPythonモジュールを使用してHTTPサーバーをエミュレートします。 手順4でバックグラウンドで実行を開始してから、すでに実行されています。 ただし、何らかの理由で実行されていない場合は、次のコマンドで再開できます。
python3 -m http.server 8000 &
HTTPサーバーとPageKiteサービスが実行されたので、local-host VNCセッションでブラウザーウィンドウを開き、アドレスhttp://remote-host.pagekite.your_domainを使用してremote-hostにアクセスします。 remote-hostのファイルシステムがブラウザに表示されます。
ローカルHTTPサーバーを公開するようにPageKiteフロントエンドサーバーとクライアントを構成する方法を見てきました。 次に、SSHを公開してリモート接続を許可するようにremote-hostを設定します。
ステップ6—PageKiteでSSHを公開する
HTTPに加えて、PageKiteを使用して、SSHなどの他のサービスをプロキシできます。これは、ネットワークやルーターの構成を変更できない環境で、NATの背後にあるホストにリモートでアクセスするのに役立ちます。
このセクションでは、PageKiteを使用してSSHサービスを公開するようにremote-hostを構成し、local-hostからSSHセッションを開きます。
PageKiteを使用してHTTPを構成したのと同じように、SSHの場合、サンプル構成ファイルを有効なファイルにコピーして、remote-hostでSSHサービスを公開します。
cd /etc/pagekite.d sudo cp 80_sshd.rc.sample 80_sshd.rc
このファイルは、デフォルト構成であるポート22で実行されているSSHサービスを公開するように事前構成されています。 その内容を見てみましょう:
nano 80_sshd.rc
これにより、ファイルが表示されます。
/etc/pagekite.d/80_sshd.rc
#################################[ This file is placed in the Public Domain. ]# # Expose the local SSH daemon service_on = raw/22:@kitename : localhost:22 : @kitesecret
このファイルは、HTTPを公開するために使用されるファイルと非常によく似ています。 唯一の違いは、SSHの場合は22であるポート番号と、SSHを公開するときにrawに設定する必要があるプロトコルです。
ここで変更を加える必要はないので、ファイルを終了します。
PageKiteサービスを再起動します。
sudo systemctl restart pagekite.service
注: PageKiteサービスがインストールされていない場合は、pagekite.pyスクリプトを使用してSSHを公開することもできます。 --service-on引数を使用して、適切なドメイン名とパスワードを使用してプロトコルをrawに設定する必要があります。 たとえば、PageKiteサービスで構成したものと同じパラメーターを使用して公開するには、コマンド./pagekite.py --clean --frontend=pagekite.your_domain:80 --service_on=raw:remote-host.pagekite.your_domain:localhost:22:examplepasswordを使用します。
local-hostでは、SSHクライアントを使用してremote-hostに接続します。 PageKiteはHTTPを使用して接続をトンネリングするため、PageKiteを介してSSHを使用するには、HTTPプロキシが必要になります。 Netcat (nc)や corkscrew など、Debianリポジトリから使用できるHTTPプロキシにはいくつかのオプションがあります。 このチュートリアルでは、ncよりも必要な引数が少ないため、corkscrewを使用します。
corkscrewをlocal-hostにインストールするには、同じ名前のパッケージでapt-get installを使用します。
sudo apt-get install corkscrew
次に、local-hostでSSHキーを生成し、remote-hostの.ssh/authorized_keysファイルに公開キーを追加します。 これを行うには、 Debian 9でSSHキーを設定する方法ガイドに従ってください。これには、手順2の公開鍵の手動コピーセクションが含まれます。
プロキシを使用してSSHサーバーに接続するには、sshと-o引数を使用して、ProxyCommandを渡し、corkscrewをHTTPプロキシとして指定します。 このように、local-hostで、次のコマンドを実行して、PageKiteトンネルを介してremote-hostに接続します。
ssh [email protected]_domain -i ~/id_rsa -o "ProxyCommand corkscrew %h 80 %h %p"
corkscrewにいくつかの引数を提供したことに注意してください。 %hおよび%pは、SSHクライアントがリモートホスト名(remote-host.pagekite.your_domain)およびリモートポート(22、[X151Xによって暗黙的に使用される])に置き換えるトークンです。 ] )corkscrewを実行する場合。 80は、PageKiteが実行されているポートを指します。 このポートは、PageKiteクライアントとフロントエンドサーバー間の通信を指します。
local-hostでこのコマンドを実行すると、remote-hostのコマンドラインプロンプトが表示されます。
PageKite経由でSSH接続が機能している状態で、次にremote_serverにVNCセッションを設定し、SSH経由のVNCを使用してlocal-hostからアクセスします。
ステップ7—SSH経由でVNCを使用する
これで、シェルを使用してリモートホストにアクセスできるようになりました。これにより、NATの背後に隠されたサーバーから発生する多くの問題が解決されます。 ただし、状況によっては、グラフィカルユーザーインターフェイスにアクセスする必要があります。 SSHは、グラフィカルなリモートアクセスに使用できるVNCなど、接続内の任意のサービスをトンネリングする方法を提供します。
フロントエンドサーバーを使用してSSHを公開するようにremote-hostを構成したら、SSH接続を使用してVNCをトンネリングし、remote-hostグラフィカルインターフェイスにアクセスできるようにします。
remote-hostで自動的に開始するようにVNCセッションを既に構成しているため、local-hostを使用してsshと[を使用してremote-hostに接続します。 X159X]引数:
ssh [email protected]_domain -i ~/id_rsa -o "ProxyCommand corkscrew %h 80 %h %p" -L5902:localhost:5901
-L引数は、特定のローカルポートへの接続をリモートホストおよびポートに転送する必要があることを指定します。 この引数とともに、ポート番号、コロン、IPアドレス、ドメイン、またはホスト名、別のコロンとポート番号を指定しました。 この情報を詳しく見てみましょう。
- 最初のポート番号は、リモートホストからトンネル接続を受信するために、SSH接続を開始するホスト(この場合は
local-host)で使用するポート番号を指します。 この場合、local-hostの観点から、remote-hostからのVNCセッションは、ポート5902でローカルに利用可能になります。 ポート5901はすでにlocal-hostで独自のVNCセッションに使用されているため、使用できませんでした。 - 最初のコロンの後に、トンネリングするVNCセッションを提供しているデバイスのホスト名(またはIPアドレス)を指定します。 ホスト名を指定すると、SSHを提供しているホストによってIPアドレスに解決されます。 この場合、
remote-hostがSSH接続を提供し、VNCセッションもこの同じホストによって提供されるため、localhostを使用できます。 - 2番目のコロンの後、トンネリングされるサービスが提供されるポートを提供します。 VNCは
remote-hostのこのポートで実行されているため、ポート5901を使用します。
接続が確立されると、remote-host上のリモートシェルが表示されます。
これで、ポート5902自体に接続することにより、local-hostからremote-hostVNCセッションに到達できます。 これを行うには、VNCクライアントのlocal-host GUIからシェルを開き、次のコマンドを実行します。
vncviewer localhost:5902
remote-host VNCパスワードを入力すると、そのグラフィカル環境にアクセスできるようになります。
注: VNCセッションの実行時間が長すぎると、remote-hostのGUIがXの灰色の画面に置き換えられるというエラーが発生する場合があります。カーソル。 このような場合は、remote-hostでsudo systemctl restart vncserver@1を使用してVNCセッションを再開してみてください。 サービスが実行されたら、接続を再試行してください。
この設定は、リモートアクセスを使用するサポートチームに役立ちます。 SSHを使用して、remote-hostが到達できるすべてのサービスをトンネリングすることができます。 このようにして、remote-hostを、実行中のWindowsや別のOSを含む、多くのホストが存在するローカルに接続されたネットワークへのゲートウェイとして設定できます。 ホストにVNCセッションが設定されたVNCサーバーがある限り、PageKitefront-end-serverによってトンネリングされたSSHを介してグラフィカルユーザーインターフェイスを使用してホストにアクセスできます。
最後のステップでは、異なるパスワードを持つより多くのクライアントをサポートするようにPageKiteフロントエンドを構成します。
手順8—多くのクライアント用のフロントエンドサーバーの構成(オプション)
front-end-serverを使用して、多くのクライアントにリモートアクセスを提供するとします。 このマルチユーザー設定では、サーバーに接続するためにそれぞれに異なるドメイン名とパスワードを使用して、それらを分離することがベストプラクティスになります。 これを行う1つの方法は、サーバー上のさまざまなポートで複数のPageKiteサービスを実行し、それぞれが独自のサブドメインとパスワードで構成されていることですが、これを整理するのは難しい場合があります。
幸い、PageKiteフロントエンドは複数のクライアント自体の構成をサポートしているため、単一のポートで同じサービスを使用できます。 これを行うには、ドメイン名とパスワードを使用してフロントエンドを構成します。
front-end-serverを指すワイルドカードDNSエントリ*.pagekite.your_domainを構成したので、remote-host.client-1.pagekite.your_domainなどのサブドメインのDNSエントリもサーバーを指すことができるため、ドメインを使用できます。 client1.pagekite.your_domainおよびclient2.pagekite.your_domainで終わり、異なるパスワードを持つ異なるクライアントのホストを識別します。
front-end-serverでこれを行うには、/etc/pagekite.d/20_frontends.rcファイルを開きます。
sudo nano /etc/pagekite.d/20_frontends.rc
domainキーワードを使用してドメインを追加し、ドメインごとに異なるパスワードを設定します。 前述のドメインを設定するには、次を追加します。
/etc/pagekite.d/20_frontends.rc
#################################[ This file is placed in the Public Domain. ]# # Front-end selection # # Front-ends accept incoming requests on your behalf and forward them to # your PageKite, which in turn forwards them to the actual server. You # probably need at least one, the service defaults will choose one for you. # Use the pagekite.net service defaults. # defaults # If you want to use your own, use something like: # frontend = hostname:port # or: # frontends = COUNT:dnsname:port isfrontend ports=80,443 protos=http,https,raw domain=http,https,raw:*.pagekite.your_domain:examplepassword domain=http,https,raw:*.client-1.pagekite.your_domain:examplepassword2 domain=http,https,raw:*.client-2.pagekite.your_domain:examplepassword3 rawports=virtual
ファイルを保存して終了します。
構成ファイルを変更した後、PageKiteを再起動します。
sudo systemctl restart pagekite.service
リモートホストで、新しいドメインとパスワードに従って接続するようにPageKiteクライアントを構成しましょう。 たとえば、remote-hostで、client-1.pagekite.your_domainを使用して接続するには、front-end-serverに接続するための資格情報が保存されているファイル/etc/pagekite.d/10_account.rcを変更します。
sudo nano /etc/pagekite.d/10_account.rc
kitenameおよびkitesecretを適切な資格情報に変更します。 ドメインremote-host.client-1.pagekite.your_domainの場合、構成は次のようになります。
/etc/pagekite.d/10_account.rc
#################################[ This file is placed in the Public Domain. ]# # Replace the following with your account details. kitename = remote-host.client-1.pagekite.your_domain kitesecret = examplepassword2 # Delete this line!
ファイルを保存して終了します。
ファイルを変更した後、PageKiteサービスを再起動します。
sudo systemctl restart pagekite.service
これで、local-hostで、SSH経由でremote-hostに接続できます。
ssh [email protected]_domain -i ~/id_rsa -o "ProxyCommand corkscrew %h 80 %h %p"
ドメインclient-2.pagekite.your-domainを別のクライアントに使用できます。 このようにして、サービスを分離して管理することができ、一方のクライアントのパスワードを変更したり、もう一方に影響を与えずに一方のクライアントを無効にすることもできます。
結論
この記事では、Debian 9 DropletにプライベートPageKiteフロントエンドサーバーをセットアップし、それを使用して、NATの背後にあるリモートホストでHTTPおよびSSHサービスを公開しました。 次に、local-hostサーバーからこれらのサービスに接続し、PageKiteの機能を確認しました。 前述したように、これは、VNCなどのSSH接続で他のサービスをトンネリングできるため、リモートアクセスアプリケーションの効果的なセットアップになる可能性があります。
PageKiteの詳細については、PageKiteサポート情報をご覧ください。 ドロップレットを使用したネットワーキングについてさらに詳しく知りたい場合は、DigitalOceanのネットワーキングドキュメントをご覧ください。