序章

プライベートネットワークは通常、 NAT (ネットワークアドレス変換)を使用してホストへのインターネットアクセスを提供し、プライベートネットワーク内のすべてのホストと単一のパブリックIPアドレスを共有します。 NATシステムでは、プライベートネットワーク内のホストはネットワーク外からは見えません。 これらのホストで実行されているサービスをパブリックインターネットに公開するには、通常、ゲートウェイでNATルールを作成します。これは一般にポート転送ルールと呼ばれます。 ただし、いくつかの状況では、これらのルールを構成するためのゲートウェイにアクセスできません。 このような状況では、PageKiteのようなトンネリングソリューションが役立ちます。

PageKite は、ポート転送を必要とせずにプライベートネットワーク内のサービスをパブリックインターネットに公開できる、高速で安全なトンネリングソリューションです。 これを行うには、フロントエンドサーバーと呼ばれる外部サーバーに依存します。このサーバーには、NATの背後にあるサーバーとクライアントが接続して、それらの間の通信を許可します。 デフォルトでは、PageKiteは独自の商用 pagekite.net サービスを使用しますが、完全にオープンソースのプロジェクトであるため、[X207Xなどの公的にアクセス可能なホストにプライベートフロントエンドをセットアップできます。 ]DigitalOceanドロップレット。 この設定により、NATの背後にあるホストへのリモートアクセスのためのベンダーに依存しないソリューションを作成できます。 フロントエンドに接続するようにPageKiteクライアントでリモートホストを構成し、SSHポートを公開することにより、SSHを使用してコマンドラインインターフェイスシェルを介してリモートホストにアクセスできます。 SSH接続で実行されているVNCRDPなどのデスクトップ共有システムを使用して、グラフィカルユーザーインターフェイスにアクセスすることもできます。

このチュートリアルでは、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-hostlocal-host およびそれらのパブリックIPアドレス Remote_Host_Public_IPLocal_Host_Public_IP それぞれ。 このチュートリアルでは、1GBのメモリを備えた2つの標準DigitalOceanドロップレットを使用してそれらを表現します。 または、2台のローカルマシンまたは仮想マシンを使用してこれらのホストを表すこともできます。
  • 完全に登録されたドメイン名。 このチュートリアルでは、 your_domain 全体の例として。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。
  • 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このDigitalOceanDNSの紹介に従ってください。
  • とのAレコード pagekite.your_domain のIPアドレスを指す front-end-server.
  • また、すべてのドメインがで終わるようにDNSを設定する必要があります pagekite.your_domain また、私たちを指摘します front-end-server. これは、ワイルドカードDNSエントリを使用して設定できます。 この場合、ワイルドカードDNSエントリのAレコードを作成します *.pagekite.your_domain 同じIPアドレスを指すには、 Front_End_Public_IP. これは、ドメイン名でサーバーに接続するクライアントを区別するために使用されます(client-1.pagekite.your_domainclient-2.pagekite.your_domain、たとえば)、要求を適切にトンネリングします。
  • SSHトンネルを介したVNC接続をサポートするVNCクライアントがインストールされたローカルコンピューター。

ステップ1—サーバーのセットアップ

このチュートリアルでは、3つのDigitalOceanドロップレットを使用して次の役割を果たします。 front-end-server, local-host、 と remote-host. これを行うには、最初に設定します local-hostremote-host グラフィカル環境にアクセスし、の動作を模倣するまで remote-host NATの下で、PageKiteをそのサービスにアクセスするためのソリューションとして使用できるようにします。 それに加えて、 front-end-server Dropletファイアウォールルールにより、PageKiteと連携し、接続を仲介できるようになります local-hostremote-host.

複数のサーバーで作業するため、次のように、コマンドリストでさまざまな色を使用して、使用しているサーバーを識別します。

  1. # Commands and outputs in the front-end-server Droplet
  1. # Commands and outputs in the remote-host Droplet
  1. # Commands and outputs in the local-host Droplet
  1. # Commands and outputs in both the remote-host and local-host Droplets

まず、両方の手順を実行しましょう remote-hostlocal-host ドロップレット。依存関係をインストールし、VNCを使用してグラフィカル環境へのアクセスを設定します。 その後、3つのドロップレットのそれぞれでファイアウォール構成をカバーして、 front-end-server PageKiteを実行し、NATを使用して接続を模倣するには remote-host.

依存関係のインストール

両方のグラフィカルインターフェイスにアクセスする必要があります local-hostremote-host このデモンストレーションを実行するホスト。 の上 local-host、VNCセッションを使用してそのグラフィカルインターフェイスにアクセスし、ブラウザを使用してセットアップをテストします。 の上 remote-host、からアクセスするVNCセッションを設定します local-host.

VNCを設定するには、最初にいくつかの依存関係をインストールする必要があります local-hostremote-host. ただし、パッケージをインストールする前に、両方のサーバーで次のコマンドを実行して、リポジトリのパッケージリストを更新する必要があります。

  1. sudo apt-get update

次に、VNCサーバーとグラフィカルユーザー環境をインストールします。これは、VNCセッションを開始するために必要です。 TightVNCサーバーとXfceデスクトップ環境を使用します。これらは、以下を実行してインストールできます。

  1. sudo apt-get install xfce4 xfce4-goodies tightvncserver

グラフィカル環境のインストールの途中で、使用するキーボードレイアウトについて尋ねられます。 QWERTY USキーボードの場合は、 English (US).

これらに加えて、 local-host 接続を実行するには、VNCビューアとインターネットブラウザが必要です。 remote-host. このチュートリアルでは、FirefoxWebブラウザxtightvncviewerをインストールします。 それらをインストールするには、以下を実行します。

  1. sudo apt-get install firefox-esr xtightvncviewer

グラフィカル環境がインストールされている場合、システムはデフォルトでグラフィカルモードで初期化されます。 DigitalOceanコンソールを使用すると、グラフィカルログインマネージャを視覚化できますが、ログインしたり、コマンドラインインターフェイスを使用したりすることはできません。 このセットアップでは、NATを使用しているかのようにネットワークの動作を模倣しています。 これを行うには、SSHを使用して接続できないため、DigitalOceanコンソールを使用する必要があります。 したがって、起動時にグラフィカルユーザーインターフェイスが自動的に起動しないようにする必要があります。 これは、両方のサーバーでログインマネージャーを無効にすることで実行できます。

  1. sudo systemctl disable lightdm.service

ログインマネージャを無効にした後、Dropletsを再起動し、DigitalOceanコンソールを使用してログインできるかどうかをテストできます。 これを行うには、次を実行します。

  1. sudo shutdown -r now

次に、DigitalOceanコントロールパネルの[ドロップレット]ページに移動してDigitalOceanコンソールにアクセスし、 local-host ドロップレットをクリックし、右上隅のスイッチの近くにあるコンソールをクリックして、ドロップレットのオンとオフを切り替えます。

コンソールでEnterキーを押すと、ユーザー名とパスワードの入力を求められます。 次のクレデンシャルを入力して、コマンドラインプロンプトを表示します。

あなたがのためにこれをしたら local-host、繰り返します remote-host.

両方のドロップレットのコンソールを設定したら、VNCを設定できます。

VNCのセットアップ

ここでは、基本的なVNCセットアップをまとめます。 これを設定する方法のより詳細なガイドが必要な場合は、 Debian9にVNCをインストールして構成する方法のチュートリアルを確認してください。

VNCセッションを開始するには、両方で次を実行します local-hostremote-host 飛沫:

  1. vncserver

最初の実行時に、システムは構成ファイルを作成し、メインパスワードを要求します。 希望のパスワードを入力し、確認してください。 VNCサーバーは、別のユーザーのVNCセッションを表示するために使用される表示専用パスワードも要求します。 表示専用のVNCセッションは必要ないため、次のように入力します n このプロンプトに対して。

出力は次のようになります。

Output
sammy@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

The :1 ホスト名の後は、VNCセッションの番号を表します。 デフォルトでは、セッション番号 1 ポートで実行されます 5901、セッション番号 2 ポートで 5902、 等々。 前の出力に続いて、アクセスできます remote-host VNCクライアントを使用して接続する Remote_Host_Public_IP ポートで 5901.

以前の構成の問題の1つは、永続的ではないことです。つまり、ドロップレットを再起動したときにデフォルトで開始されません。 永続化するために、Systemdサービスを作成して有効にすることができます。 そのために、 [email protected] 下のファイル /etc/systemd/system、を使用して行うことができます nano:

  1. 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. 次に、次のコマンドを実行して、システムに新しいユニットファイルを認識させます。

  1. sudo systemctl daemon-reload

次に、サーバーが次のコマンドを実行して初期化されたときに、サービスが自動的に開始されるようにします。

  1. sudo systemctl enable [email protected]

私たちが使用するとき enable でコマンド systemctl、シンボリックリンクは、システムが初期化されたときにサービスが自動的に開始されるように作成されます。これは、前のコマンドの出力によって通知されます。

Output
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /etc/systemd/system/[email protected].

VNCサーバーが適切に構成されている場合、ドロップレットを再起動して、サービスが自動的に開始されるかどうかをテストできます。

  1. sudo shutdown -r now

システムが初期化されたら、SSHを使用してログインし、VNCが次のコマンドで実行されているかどうかを確認します。

  1. 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-hostlocal-host. 次に、各ホストのファイアウォール構成について説明します。

ファイアウォールの構成

で始まる remote-host、NATの背後からの動作を模倣するために、Dropletsのサービスへの外部接続を拒否するようにファイアウォールを構成します。 このチュートリアルでは、ポートを使用します 8000 HTTP接続の場合、 22 SSHの場合、および 5901 VNCの場合、これらのポートへの外部接続を拒否するようにファイアウォールを構成します。

Debian 9 初期設定に従うことにより、 remote-host SSHへの接続を許可するファイアウォールルールがあります。 次のコマンドを実行して、このルールを確認できます。

  1. sudo ufw status verbose

出力は次のようになります。

Output
Status: 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 実行します:

  1. sudo ufw delete allow OpenSSH

ファイアウォールのステータスを再度確認することで、SSHルールが削除されたことを確認できます。

  1. sudo ufw status verbose

次のように、出力にはファイアウォールルールは表示されません。

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip

ファイアウォールは構成されていますが、次の方法で有効にするまで、新しい構成は実行されません。

  1. sudo ufw enable

有効にすると、アクセスできなくなりますのでご注意ください remote-host コマンドの出力に記載されているように、SSH経由で:

Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

ログアウトします remote-host次に、SSHまたはVNC接続を確立して構成をテストします。 それは不可能です。 今後、アクセスする可能性があります remote-host DigitalOceanコンソールによってのみ。

の上 local-host、SSHポートは開いたままにします。 VNCセッションへのアクセスを許可するために必要なファイアウォールルールは1つだけです。

  1. sudo ufw allow 5901

ファイアウォールルールを変更した後、次を実行して有効にします。

  1. sudo ufw enable

これで、ローカルマシン前提条件のVNCクライアントを使用してVNC接続をテストし、接続することができます。 local-host ポートで 5901 設定したVNCパスワードを使用します。

これを行うには、VNCクライアントを開き、に接続します Local_Host_Public_IP:5901. パスワードを入力すると、VNCセッションに接続します。

注: VNCセッションへの接続に問題がある場合は、でVNCサービスを再起動してください local-hostsudo systemctl restart vncserver@1 もう一度接続してみてください。

Xfceは最初の起動時に、環境の初期設定について質問します。

このチュートリアルでは、デフォルトの構成を使用オプションを選択します。

最後に、ポートへの接続を許可する必要があります 80front-end-server、PageKiteで使用されます。 上のターミナルを開く front-end-server 次のコマンドを使用します。

  1. sudo ufw allow 80

さらに、ポートでのトラフィックを許可します 443 HTTPSの場合:

  1. sudo ufw allow 443

新しいファイアウォール構成を有効にするには、次のコマンドを実行します。

  1. sudo ufw enable

ドロップレットを設定したので、PageKiteフロントエンドサーバーを構成しましょう。

ステップ2—フロントエンドサーバーへのPageKiteのインストール

Pythonスクリプトを使用してPageKiteを実行してフロントエンドサーバーをセットアップすることは可能ですが、システムサービスを使用して実行する方が信頼性が高くなります。 そのためには、サーバーにPageKiteをインストールする必要があります。

Debianサーバーにサービスをインストールするための推奨される方法は、配布パッケージを使用することです。 このようにして、自動更新を取得し、起動時に起動するようにサービスを構成することができます。

まず、PageKiteをインストールするようにリポジトリを構成します。 これを行うには、リポジトリのパッケージリストを更新します。

  1. sudo apt-get update

更新が完了したら、パッケージ dirmngr をインストールします。これは、安全なインストールを保証するために、PageKiteリポジトリからのキーリングのインポートをサポートするために必要です。

  1. sudo apt-get install dirmngr

次に、リポジトリをに追加します /etc/apt/sources.list ファイル、実行することにより:

  1. echo deb http://pagekite.net/pk/deb/ pagekite main | sudo tee -a /etc/apt/sources.list

リポジトリを設定したら、PageKiteパッケージキーを信頼できるキーのセットにインポートして、このリポジトリからパッケージをインストールできるようにします。 パッケージキーの管理は、 apt-key 効用。 この場合、キーをインポートする必要があります AED248B1C7B2CAC3 キーサーバーから keys.gnupg.net、これは次のコマンドを実行することで実行できます。

  1. sudo apt-key adv --recv-keys --keyserver keys.gnupg.net AED248B1C7B2CAC3

次に、リポジトリのパッケージリストを再度更新して、 pagekite パッケージはインデックスに登録されます:

  1. sudo apt-get update

最後に、次のコマンドでインストールします。

  1. sudo apt-get install pagekite

PageKiteがインストールされたので、フロントエンドサーバーをセットアップし、起動時に実行するようにサービスを構成しましょう。

手順3—フロントエンドサーバーの構成

インストールしたばかりのPageKiteパッケージを使用して、PageKiteフロントエンドサーバーへの接続を構成できます。 また、PageKite接続を受信するためのフロントエンドサービスを設定するためにも使用できます。これは、ここで実行したいことです。 そのためには、PageKiteの構成ファイルを編集する必要があります。

PageKiteは、その構成ファイルをディレクトリに保存します /etc/pagekite.d. 私たちがしなければならない最初の変更は、 /etc/pagekite.d/10_account.rc このファイルは、PageKiteがフロントエンドサーバーに接続するクライアントとして設定されている場合にのみ使用されるためです。 を使用してファイルを編集できます nano:

  1. 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:

  1. 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サービスを再起動します。

  1. sudo systemctl restart pagekite.service

次に、起動時に次のコマンドで起動できるようにします。

  1. sudo systemctl enable pagekite.service

今、私たちは front-end-server 実行中、HTTPポートを公開してテストしてみましょう remote-host からそれに接続します local-host.

ステップ4—NATの背後にあるホストに接続する

テストするには front-end-server、でHTTPサービスを開始しましょう remote-host PageKiteを使用してインターネットに公開し、 local-host. 覚えておいてください、私たちはに接続する必要があります remote-host 着信SSH接続を拒否するようにファイアウォールを構成したため、DigitalOceanコンソールを使用します。

テスト用にHTTPサーバーを起動するには、Python3を使用できます。 http.server モジュール。 最小限のDebianインストールでもPythonはすでにインストールされているので、 http.server ポートを使用してHTTPサーバーを起動するための標準のPythonライブラリの一部です 8000 の上 remote-host 実行します:

  1. python3 -m http.server 8000 &

Debian9はデフォルトでPython2を引き続き使用するため、実行してPythonを呼び出す必要があります python3 サーバーを起動します。 終了 & 文字は、コマンドがバックグラウンドで実行されることを示しているため、シェルターミナルを引き続き使用できます。 出力は、サーバーが実行中であることを示します。

Output
sammy@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 ランニング:

  1. wget https://pagekite.net/pk/pagekite.py

ダウンロードした後、次のコマンドを実行して実行可能としてマークします。

  1. 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 ドメイン上のHTTPサーバーを公開します remote-host.pagekite.your_domain 以下を実行することにより、 your_domainexamplepassword あなた自身の資格で:

  1. ./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 フロントエンドのアドレスを指定します。 ポートを使用していることに注意してください 80、ステップ3でこのポートで実行するようにフロントエンドを設定したため。
  • 最後の議論では、 --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 アドレスにアクセスすることによって http://remote-host.pagekite.your_domain. これにより、次のファイルシステムが表示されます remote-host:

PageKiteの接続を停止するには remote-host、 打つ CTRL+C の中に remote-host コンソール。

テストしたので front-end-server、設定しましょう remote-host PageKiteとの接続を永続化し、起動時に開始します。

ステップ5—ホスト構成を永続化する

間の接続 remote-host そしてその front-end-server 手順4で設定したものは永続的ではありません。つまり、サーバーの再起動時に接続が再確立されることはありません。 このソリューションを長期間使用したい場合、これは問題になるので、このセットアップを永続的にしましょう。

PageKiteをサービスとして実行するように設定することが可能です remote-host、起動時に開始されるようにします。 これを行うために、私たちが使用したのと同じ配布パッケージを使用することができます front-end-server ステップ3で。 の中に remote-host DigitalOceanコントロールパネルからアクセスするコンソールで、次のコマンドを実行してインストールします dirmngr:

  1. sudo apt-get install dirmngr

次に、PageKiteリポジトリを追加し、GPGキーをインポートするには、次のコマンドを実行します。

  1. echo deb http://pagekite.net/pk/deb/ pagekite main | sudo tee -a /etc/apt/sources.list
  2. sudo apt-key adv --recv-keys --keyserver keys.gnupg.net AED248B1C7B2CAC3

パッケージリストを更新してPageKiteをインストールするには、次のコマンドを実行します。

  1. sudo apt-get update
  2. sudo apt-get install pagekite

PageKiteをクライアントとして設定するには、 front-end-server ファイル内のアドレスとポート /etc/pagekite.d/20_frontends.rc. を使用して編集できます nano:

  1. sudo nano /etc/pagekite.d/20_frontends.rc

このファイルで、次の行にコメントを付けます defaults 使用を避けるため pagekite.net サービスのデフォルト。 また、 front-end-server パラメータを使用したアドレスとポート frontend、行を追加 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. まず、次のコマンドを実行してファイルを開きます。

  1. sudo nano /etc/pagekite.d/10_account.rc

ドメインを設定するには、ドメイン名とパスワードを使用して接続します front-end-server、パラメータの編集 kitenamekitesecret それぞれ。 次に強調表示されているように、構成を有効にするには、ファイルの最後の行もコメントアウトする必要があります。

/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には、拡張子がで終わるサンプル構成ファイルが含まれています。 .sample 構成ディレクトリ内 /etc/pagekite.d. サンプル構成ファイルをHTTP用の有効なファイルにコピーすることから始めましょう。

  1. cd /etc/pagekite.d
  2. sudo cp 80_httpd.rc.sample 80_httpd.rc

HTTP構成ファイルはほぼセットアップされています。 HTTPポートを調整するだけで済みます。これは、コピーしたファイルを編集することで実行できます。

  1. 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 それぞれ。

この構成ファイルへの変更を保存した後、変更を有効にするためにサービスを再起動する必要があります。

  1. sudo systemctl restart pagekite.service

起動時にサービスを開始するには、次のコマンドでサービスを有効にします。

  1. sudo systemctl enable pagekite.service

以前と同じように、 http.server HTTPサーバーをエミュレートするPythonモジュール。 手順4でバックグラウンドで実行を開始してから、すでに実行されています。 ただし、何らかの理由で実行されていない場合は、次のコマンドで再開できます。

  1. python3 -m http.server 8000 &

HTTPサーバーとPageKiteサービスが実行されているので、ブラウザウィンドウを開きます。 local-host VNCセッションとアクセスに使用する remote-host アドレスを使用して http://remote-host.pagekite.your_domain. これにより、のファイルシステムが表示されます。 remote-host ブラウザで。

ローカルHTTPサーバーを公開するようにPageKiteフロントエンドサーバーとクライアントを構成する方法を見てきました。 次に、設定します remote-host SSHを公開し、リモート接続を許可します。

ステップ6—PageKiteでSSHを公開する

HTTPに加えて、PageKiteを使用して、SSHなどの他のサービスをプロキシできます。これは、ネットワークやルーターの構成を変更できない環境で、NATの背後にあるホストにリモートでアクセスするのに役立ちます。

このセクションでは、構成します remote-host PageKiteを使用してSSHサービスを公開し、からSSHセッションを開きます。 local-host.

PageKiteを使用してHTTPを構成したのと同じように、SSHの場合、サンプル構成ファイルを有効なファイルにコピーして、SSHサービスを公開します。 remote-host:

  1. cd /etc/pagekite.d
  2. sudo cp 80_sshd.rc.sample 80_sshd.rc

このファイルは、ポートで実行されているSSHサービスを公開するように事前構成されています 22、これはデフォルトの構成です。 その内容を見てみましょう:

  1. 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を公開するために使用されるファイルと非常によく似ています。 唯一の違いはポート番号です。 22 SSHの場合、およびプロトコル。 raw SSHを公開するとき。

ここで変更を加える必要はないので、ファイルを終了します。

PageKiteサービスを再起動します。

  1. sudo systemctl restart pagekite.service

注:SSHを使用してSSHを公開することもできます pagekite.py PageKiteサービスがインストールされていない場合のスクリプト。 私たちはただ使用する必要があります --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 (など、Debianリポジトリから使用できるHTTPプロキシにはいくつかのオプションがあります。nc)およびコルク栓抜き。 このチュートリアルでは、 corkscrew、必要な引数が nc.

インストールするには corkscrew の上 local-host、 使用する apt-get install 同じ名前のパッケージで:

  1. sudo apt-get install corkscrew

次に、SSHキーを生成します local-host 公開鍵をに追加します .ssh/authorized_keys のファイル remote-host. これを行うには、 Debian 9でSSHキーを設定する方法ガイドに従ってください。これには、手順2の公開鍵の手動コピーセクションが含まれます。

プロキシを使用してSSHサーバーに接続するには、 ssh とともに -o 渡す引数 ProxyCommand と指定します corkscrew HTTPプロキシとして。 このように、 local-host、次のコマンドを実行して接続します remote-host PageKiteトンネル経由:

  1. ssh sammy@remote-host.pagekite.your_domain -i ~/id_rsa -o "ProxyCommand corkscrew %h 80 %h %p"

にいくつかの引数を提供したことに注意してください corkscrew. The %h%p SSHクライアントがリモートホスト名に置き換えるトークンです(remote-host.pagekite.your_domain)およびリモートポート(22、暗黙的に使用される ssh)実行時 corkscrew. The 80 PageKiteが実行されているポートを指します。 このポートは、PageKiteクライアントとフロントエンドサーバー間の通信を指します。

このコマンドを実行すると local-host、コマンドラインプロンプト remote-host 現れる。

PageKiteを介してSSH接続が機能している状態で、次にVNCセッションを設定しましょう remote_server からアクセスします local-host SSH経由でVNCを使用します。

ステップ7—SSH経由でVNCを使用する

これで、シェルを使用してリモートホストにアクセスできるようになりました。これにより、NATの背後に隠されたサーバーから発生する多くの問題が解決されます。 ただし、状況によっては、グラフィカルユーザーインターフェイスにアクセスする必要があります。 SSHは、グラフィカルなリモートアクセスに使用できるVNCなど、接続内の任意のサービスをトンネリングする方法を提供します。

remote-host フロントエンドサーバーを使用してSSHを公開するように構成されているので、SSH接続を使用してVNCをトンネリングし、 remote-host グラフィカルインターフェイス。

自動的に開始するようにVNCセッションをすでに構成しているので remote-host、 我々は使用するだろう local-host 接続するには remote-host を使用して ssh とともに -L 口論:

  1. ssh sammy@remote-host.pagekite.your_domain -i ~/id_rsa -o "ProxyCommand corkscrew %h 80 %h %p" -L5902:localhost:5901

The -L 引数は、特定のローカルポートへの接続をリモートホストおよびポートに転送する必要があることを指定します。 この引数とともに、ポート番号、コロン、IPアドレス、ドメイン、またはホスト名、別のコロンとポート番号を指定しました。 この情報を詳しく見てみましょう。

  • 最初のポート番号は、SSH接続を開始するホスト(この場合は)で使用するポート番号を指します。 local-host)、リモートホストからトンネル接続を受信します。 この場合、 local-host、からのVNCセッション remote-host ローカルで、ポートで利用可能になります 5902. ポートを使用できませんでした 5901 すでに使用されているので local-host 独自のVNCセッション用。
  • 最初のコロンの後に、トンネリングするVNCセッションを提供しているデバイスのホスト名(またはIPアドレス)を指定します。 ホスト名を指定すると、SSHを提供しているホストによってIPアドレスに解決されます。 この場合、 remote-host はSSH接続を提供しており、VNCセッションもこの同じホストによって提供されています。 localhost.
  • 2番目のコロンの後、トンネリングされるサービスが提供されるポートを提供します。 ポートを使用します 5901、VNCはこのポートで実行されているため、 remote-host.

接続が確立されると、リモートシェルが表示されます remote-host.

今、私たちは到達することができます remote-host からのVNCセッション local-host ポートに接続することにより 5902 自体。 これを行うには、からシェルを開きます local-host VNCクライアントでGUIを実行してから、次のコマンドを実行します。

  1. vncviewer localhost:5902

提供すると remote-host VNCパスワード、グラフィック環境にアクセスできるようになります。

注: VNCセッションの実行時間が長すぎると、GUIがオンになっているというエラーが発生する場合があります。 remote-host 灰色の画面に置き換えられます X カーソル用。 これが発生した場合は、でVNCセッションを再起動してみてください remote-hostsudo systemctl restart vncserver@1. サービスが実行されたら、接続を再試行してください。

この設定は、リモートアクセスを使用するサポートチームに役立ちます。 SSHを使用して、 remote-host. このように、私たちは設定することができます remote-host Windowsや別のOSを実行しているホストを含む、多くのホストが存在するローカル接続ネットワークへのゲートウェイとして。 ホストにVNCセッションが設定されたVNCサーバーがある限り、PageKiteによってトンネリングされたSSHを介してグラフィカルユーザーインターフェイスを使用してホストにアクセスできます。 front-end-server.

最後のステップでは、異なるパスワードを持つより多くのクライアントをサポートするようにPageKiteフロントエンドを構成します。

手順8—多くのクライアント用のフロントエンドサーバーの構成(オプション)

を使用するとします front-end-server 多くのクライアントにリモートアクセスを提供します。 このマルチユーザー設定では、サーバーに接続するためにそれぞれに異なるドメイン名とパスワードを使用して、それらを分離することがベストプラクティスになります。 これを行う1つの方法は、サーバー上のさまざまなポートで複数のPageKiteサービスを実行し、それぞれが独自のサブドメインとパスワードで構成されていることですが、これを整理するのは難しい場合があります。

幸い、PageKiteフロントエンドは複数のクライアント自体の構成をサポートしているため、単一のポートで同じサービスを使用できます。 これを行うには、ドメイン名とパスワードを使用してフロントエンドを構成します。

ワイルドカードDNSエントリを構成したので *.pagekite.your_domain 私たちを指摘する front-end-server、のようなサブドメインのDNSエントリ remote-host.client-1.pagekite.your_domain サーバーを指すこともできるので、末尾が client1.pagekite.your_domainclient2.pagekite.your_domain 異なるパスワードを持つ異なるクライアントのホストを識別するため。

でこれを行うには front-end-server、を開きます /etc/pagekite.d/20_frontends.rc ファイル:

  1. 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を再起動します。

  1. sudo systemctl restart pagekite.service

リモートホストで、新しいドメインとパスワードに従って接続するようにPageKiteクライアントを構成しましょう。 たとえば、 remote-host、を使用して接続するには client-1.pagekite.your_domain、ファイルを変更します /etc/pagekite.d/10_account.rc、接続するクレデンシャル front-end-server 保存された:

  1. sudo nano /etc/pagekite.d/10_account.rc

変化する kitenamekitesecret 適切な資格情報に。 ドメインの場合 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サービスを再起動します。

  1. sudo systemctl restart pagekite.service

local-host、に接続できます remote-host SSH経由:

  1. ssh sammy@remote-host.client-1.pagekite.your_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のネットワーキングドキュメントをご覧ください。