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.server
Pythonモジュールを使用して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-host
VNCセッションに到達できます。 これを行うには、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のネットワーキングドキュメントをご覧ください。