_著者はhttps://www.brightfunds.org/funds/open-internet-free-speech[Open Internet / Free Speech Fund]を選択してhttps://do.co/w4do-ctaの一部として寄付を受け取りました[寄付のために書く]プログラム。

前書き

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

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

このチュートリアルでは、Debian 9を実行しているサーバーにPageKiteフロントエンドサービスをインストールして設定します。 また、さらに2つのDebian 9サーバーをセットアップして、ローカル環境とリモート環境をシミュレートします。 完了したら、複数のクライアント用にサーバーをセットアップし、SSHとVNCを使用したリモートアクセス用の実用的なソリューションでテストします。

前提条件

このガイドに従う前に、次のものが必要です。

  • チュートリアルで使用するドロップレットを設定するためのhttps://cloud.digitalocean.com/registrations/new[DigitalOcean account]

  • フロントエンドサーバーとして機能するパブリックIPアドレスを持つDebian 9を実行するサーバー。https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-9 [ Debian 9での初期サーバー設定]ガイド。 1GBのメモリを搭載した標準のDigitalOcean Dropletは、テスト目的または少数の接続があるアプリケーションには十分です。 このサーバーは、ホスト名「+ front-end-server 」で、そのパブリックIPアドレスは「+」で参照します。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-に従って設定されたPageKiteサービスを使用して接続するリモートおよびローカルホストの役割を果たすDebian 9を実行する2つのホストwith-debian-9 [Debian 9での初期サーバー設定]ガイド。 NATを介したインターネットアクセスを備えたリモートホストは、PageKiteトンネルを使用してローカルホストからアクセスされます。 リモートおよびローカルホストは、ホスト名 `+ remote-host `および ` local-host +`によって参照され、パブリックIPアドレスはそれぞれ “および “によって参照されます。 このチュートリアルでは、1GBのメモリを備えた2つの標準DigitalOceanドロップレットを使用してそれらを表現します。 あるいは、2つのローカルまたは仮想マシンを使用して、これらのホストを表すこともできます。

  • 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例として「++」を使用します。 https://namecheap.com [Namecheap]でドメイン名を購入するか、http://www.freenom.com/en/index.html [Freenom]で無料で入手するか、選択したドメインレジストラを使用できます。 。

  • 次の両方のDNSレコードがサーバーに設定されています。 追加方法の詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-dns [DigitalOcean DNSの概要]を参照してください。

  • `+ front-end-server `のIPアドレスを指す ` pagekite。+`を持つAレコード。

  • また、 `+ pagekite。`で終わるすべてのドメインが ` front-end-server `を指すようにDNSを設定する必要もあります。 これは、ワイルドカードDNSエントリを使用して設定できます。 この場合、ワイルドカードDNSエントリ「 *。pagekite。」のAレコードを作成して、同じIPアドレス「+」を指し示します。 これは、ドメイン名(たとえば、「+ client-1.pagekite。」と「 client-2.pagekite。+」)でサーバーに接続するクライアントを区別し、要求を適切にトンネリングするために使用されます。

  • SSHトンネルを介したVNC接続をサポートするVNCクライアントがインストールされたローカルコンピューター。

  • Windowsでは、https://www.tightvnc.com/ [TightVNC]、https://www.realvnc.com/ [RealVNC]、またはhttps://www.uvnc.com/[UltraVNC]を使用できます。

  • macOSでは、組み込みのhttps://support.apple.com/guide/mac-help/screen-sharing-overview-mh14066/mac [画面共有]プログラムを使用するか、次のようなクロスプラットフォームアプリを使用できます。 RealVNC

  • Linuxでは、https://wiki.gnome.org/Apps/Vinagre [+ vinagre +]、https://kde.org/applications/internet/org.kde.krdc [`などの多くのオプションから選択できます。 + krdc + `]、https://www.realvnc.com/ [RealVNC]、またはhttps://www.tightvnc.com/[TightVNC]。

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

このチュートリアルでは、3つのDigitalOcean Dropletsを使用して、「+ front-end-server 」、「 local-host 」、および「 remote-host 」の役割を果たします。 これを行うには、最初に ` local-host `と ` remote-host `を設定して、グラフィカル環境にアクセスし、NATの下で ` remote-host `の動作を模倣して、PageKiteができるようにします。サービスにアクセスするためのソリューションとして使用されます。 それに加えて、PageKiteで動作し、 ` local-host `と ` remote-host `間の接続を仲介できるように、 ` front-end-server +` Dropletファイアウォールルールを設定する必要があります。

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

# 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を使用して依存関係をインストールし、グラフィカル環境へのアクセスを設定します。 その後、3つのドロップレットのそれぞれでファイアウォール構成をカバーし、 ` front-end-server `がPageKiteを実行し、 ` remote-host +`でNATを使用した接続を模倣できるようにします。

依存関係のインストール

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

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

sudo apt-get update

次に、VNCセッションとVNCセッションを開始するために必要なグラフィカルユーザー環境をインストールします。 Tight VNCサーバーとhttps://www.xfce.org/[Xfce]デスクトップ環境を使用します。これらは次を実行してインストールできます。

sudo apt-get install xfce4 xfce4-goodies tightvncserver

グラフィカル環境のインストールの途中で、使用したいキーボードレイアウトについて尋ねられます。 QWERTY USキーボードの場合は、「英語(US)」を選択します。

これらに加えて、「+ local-host 」では、「 remote-host +」への接続を実行できるようにVNCビューアーとインターネットブラウザーが必要になります。 このチュートリアルでは、https://packages.debian.org/stretch/firefox-esr [Firefox web browser]とhttps://packages.debian.org/sid/x11/xtightvncviewer[xtightvncviewer]をインストールします。 それらをインストールするには、次を実行します。

sudo apt-get install firefox-esr xtightvncviewer

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

sudo systemctl disable lightdm.service

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

sudo shutdown -r now

次に、DigitalOceanコントロールパネルのドロップレットページに移動し、 `+ local-host +`ドロップレットを選択し、右上隅のスイッチの近くにある* Console *をクリックしてドロップレットをオンにして、DigitalOceanコンソールにアクセスします。オフ:

image:https://assets.digitalocean.com/articles/cart-64916/DigitalOcean_Control_Panel.png [DigitalOceanコントロールパネル]

コンソールでEnterキーを押すと、ユーザー名とパスワードの入力を求められます。 これらの資格情報を入力して、コマンドラインプロンプトを表示します。

image:https://assets.digitalocean.com/articles/cart-64916/DigitalOcean_Droplet_Console.jpg [DigitalOcean Droplet Console]

+ local-host on`に対してこれを行ったら、 + remote-host`に対して繰り返します。

両方のDropletのコンソールをセットアップすると、VNCをセットアップできるようになりました。

VNCのセットアップ

ここでは、基本的なVNCセットアップをまとめます。 これを設定する方法についての詳細なガイドが必要な場合は、https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-debian-をご覧ください。 9 [Debian 9にVNCをインストールおよび設定する方法]チュートリアル。

VNCセッションを開始するには、 + local-host`と + remote-host`ドロップレットの両方で次を実行します:

vncserver

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

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

[email protected]:/home/$ 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//.Xauthority does not exist

New 'X' desktop is remote-host:1

Creating default startup script /home//.vnc/xstartup
Starting applications specified in /home//.vnc/xstartup
Log file is /home//.vnc/:1.log

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

以前の構成の問題の1つは、永続的ではないことです。つまり、ドロップレットの再起動時にデフォルトで開始されないということです。 永続化するために、https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [Systemdサービス]を作成して有効にすることができます。 それを行うために、 `+ / etc / systemd / system `の下に ` vncserver @ .service `ファイルを作成します。これは ` nano +`を使用して実行できます。

sudo nano /etc/systemd/system/[email protected]

次の内容をファイルに配置し、「++」をユーザー名に置き換えます。

/etc/systemd/system/[email protected]

[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=
PAMName=login
PIDFile=/home//.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]

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

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:  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`と + localhost`の両方で前の手順に従うことを忘れないでください。 次に、各ホストのファイアウォール構成について説明します。

ファイアウォールの構成

「+ 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の背後の動作を模倣します。

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

これでhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-pagekite-front-end-server-on-a-debian-9#prerequisitesを使用してVNC接続をテストできます[ローカルマシンの前提VNCクライアント]で、設定したVNCパスワードを使用して、ポート `+ 5901 `で ` local-host +`に接続します。

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

Xfceは最初の起動時に、環境の初期設定について尋ねます:

image:https://assets.digitalocean.com/articles/cart-64916/Initial_Xfce_Configuration.png [初期Xfce構成]

このチュートリアルでは、* Use default config *オプションを選択します。

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

sudo ufw allow 80

さらに、HTTPSのポート「443」のトラフィックを許可します。

sudo ufw allow 443

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

sudo ufw enable

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

手順2-フロントエンドサーバーへのPageKiteのインストール

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

Debianサーバーにサービスをインストールするには、https://www.digitalocean.com/community/tutorials/package-management-basics-apt-yum-dnf-pkg [配布パッケージ]を使用することをお勧めします。 これにより、自動更新を取得し、起動時に起動するようにサービスを構成できます。

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

sudo apt-get update

更新が完了したら、パッケージhttps://packages.debian.org/stretch/dirmngr [+ 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 +」行をコメントアウトして、「」を使用しているドメイン名に、「」を選択したパスワードに置き換えてください。

/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

これらの行を1つずつ説明しましょう。 最初に、PageKiteをフロントエンドサーバーとして設定するために、行「+ isfrontend 」を追加しました。 サーバーがリッスンするポートを設定するために、 ` ports = 80,443 `を追加しました。 PageKiteがプロキシするプロトコルも設定しました。 HTTP、HTTPS、およびRAW(SSH接続で使用される)を使用するには、行「 protos = http、https、raw 」を追加します。 また、サーバーの構成が競合しないように、「 defaults +」設定を無効にします。

それに加えて、 + front-end-server +`に使用するドメインを設定しました。 クライアントごとにサブドメインが使用されるため、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-pagekite-front-end-server-on- a-debian-9#prerequisites [前提条件セクションのDNS構成]。 また、クライアントの認証に使用されるパスワードも設定します。 プレースホルダーパスワード「++」を使用して、「+ domain = http、https、raw:*。pagekite。:+ `」という行を追加することでこれらの設定を行いました。 最後に、SSHを使用して接続するための追加の行を追加しました(https://stackoverflow.com/questions/25974680/setting-up-pagekite-with-my-own-frontend-to-accessで説明されているように、文書化されていません) -ssh [here]): `+ 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 3の `+ http.server `モジュールを使用できます。 Pythonは最小限のDebianインストールにも既にインストールされており、 ` http.server `は標準Pythonライブラリの一部であるため、 ` remote-host `でポート ` 8000 +`を使用してHTTPサーバーを起動するには、次を実行します。

python3 -m http.server 8000 &

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

[email protected]:~$ python3 -m http.server 8000 &
[1]
@remote-host:~$ Serving HTTP on 0.0.0.0 port 8000 ...

HTTPサーバーが実行されている状態で、PageKiteトンネルを確立できます。 これを行う簡単な方法は、 `+ pagekite.py `スクリプトを使用することです。 実行中の ` remote-host`にダウンロードできます:

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

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

chmod a+x pagekite.py

現在のディレクトリで利用可能な `+ pagekite.py `を使用して、 ` front-end-server +`に接続し、 `独自の資格情報を持つ `と` `:

./pagekite.py --clean --frontend=pagekite.:80 --service_on=http:remote-host.pagekite.:localhost:8000:

このコマンドの引数を見てみましょう。

  • `+-clean +`はデフォルト設定を無視するために使用されます。

  • `-frontend = pagekite。:80 +`は、フロントエンドのアドレスを指定します。 ステップ3でこのポートでフロントエンドを実行するように設定しているため、ポート ` 80 +`を使用していることに注意してください。

  • 最後の引数 +-service_on = http:remote-host.pagekite。:localhost:8000:+`で、公開するサービス( `+ http +)を設定します。 ( + remote-host.pagekite。+)、サービスが実行されているローカルアドレスとポートを使用します(PageKiteへの接続に使用している同じホストでサービスを公開しているため、 + localhost:8000 +) 、およびフロントエンドに接続するためのパスワード( ++)。

このコマンドが実行されると、コンソールに + Kites is flying and all is well +`というメッセージが表示されます。 その後、VNCセッション `+ local-host +`でブラウザウィンドウを開き、アドレス `+ http://remote-host.pagekiteにアクセスすることで + remote-host + `上のHTTPサーバーにアクセスするために使用できます。 + `。 これにより、 `+ remote-host`のファイルシステムが表示されます。

image:https://assets.digitalocean.com/articles/cart-64916/local-host_accessing_remote-host_web_page.png [ローカルホストアクセスリモートホストWebページ]

「+ remote-host 」でPageKiteの接続を停止するには、「 remote-host 」コンソールで「 CTRL + C +」を押します。

`+ front-end-server `をテストしたので、 ` remote-host +`を設定してPageKiteとの接続を永続化し、ブート時に開始します。

ステップ5-ホスト構成の永続化

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

PageKitを `+ 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 」を使用して、ファイルの末尾に「 frontend = pagekite.:80+」の行を追加して、「+ front-end-server 」のアドレスとポートを設定します。 必ず `+`を使用しているドメインに置き換えてください。

編集した行が強調表示された完全なファイルを次に示します。

/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:

# 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.




# Delete this line!

テキストエディターを保存して終了します。

ここで、インターネットに公開されるサービスを構成します。 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: : @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

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

sudo systemctl restart pagekite.service

起動時にサービスを開始するには、次を使用してサービスを有効にします。

sudo systemctl enable pagekite.service

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

python3 -m http.server 8000 &

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

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

ステップ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

+ localhost`では、SSHクライアントを使用して + remote-host`に接続します。 PageKiteはHTTPを使用して接続をトンネリングするため、PageKiteでSSHを使用するには、HTTPプロキシが必要です。 http://nc110.sourceforge.net/ [Netcat]( + nc +)やhttps://github.com/bryanpkc/corkscrew [`など、Debianリポジトリから使用できるHTTPプロキシのオプションがいくつかあります+コルク抜き+ `]。 このチュートリアルでは、必要な引数が「+ nc 」よりも少ないため、「 corkscrew +」を使用します。

「+ local-host to」に「+ corkscrew」をインストールするには、同じ名前のパッケージで「+ apt-get install」を使用します。

sudo apt-get install corkscrew

次に、 + local-host`でSSHキーを生成し、公開キーを + remote-host + + .ssh / authorized_keys`ファイルに追加します。 これを行うには、https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-9 [Debian 9でSSHキーを設定する方法]ガイドに従ってください。手順2の*公開キーの手動コピー*セクションを含む。

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

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

+ corkscrew +`にいくつかの引数を指定したことに注意してください。 `+%h +`と `+%p +`は、SSHクライアントがリモートホスト名( `+ remote-host.pagekite。+)とリモートポート( + 22 +、 ` + ssh + + corkscrew + `の実行時。 `+ 80 +`は、PageKiteが実行されているポートを指します。 このポートは、PageKiteクライアントとフロントエンドサーバー間の通信を指します。

このコマンドを `+ local-host `で実行すると、 ` remote-host +`のコマンドラインプロンプトが表示されます。

PageKiteを介してSSH接続が機能するので、次に「+ remote_server 」でVNCセッションを設定し、VNC over SSHを使用して「 local-host +」からアクセスします。

ステップ7-SSHを介したVNCの使用

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

フロントエンドサーバーを使用してSSHを公開するように「+ remote-host 」を設定したら、SSH接続を使用してVNCをトンネルし、「 remote-host +」グラフィカルインターフェイスにアクセスします。

`+ remote-host `で自動的に開始するようにVNCセッションを設定しているので、 ` -L `引数を指定して ` ssh `を使用して ` remote-host `に接続するために ` local-host +`を使用します。 :

ssh @remote-host.pagekite. -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 `は、独自のVNCセッションのために ` local-host +`で既に使用されているため使用できませんでした。

  • 最初のコロンの後に、トンネリングする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パスワードを提供すると、そのグラフィカル環境にアクセスできるようになります。

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

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

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

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

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

`+ front-end-server `を指すワイルドカードDNSエントリ ` *。pagekite。`を設定したため、 ` remote-host.client-1.pagekite。`のようなサブドメインのDNSエントリも可能です。サーバーを指定して、「 client1.pagekite。」と「 client2.pagekite。+」で終わるドメインを使用して、異なるパスワードを持つ異なるクライアントのホストを識別できるようにします。

`+ 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.:



rawports=virtual

ファイルを保存して終了します。

構成ファイルを変更した後、PageKiteを再起動します。

sudo systemctl restart pagekite.service

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

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

`+ kitename `と ` kitesecret `を適切な資格情報に変更します。 ドメイン ` remote-host.client-1.pagekite。+`の場合、設定は次のようになります。

/etc/pagekite.d/10_account.rc

#################################[ This file is placed in the Public Domain. ]#
# Replace the following with your account details.




# Delete this line!

ファイルを保存して終了します。

ファイルを変更した後、PageKiteサービスを再起動します。

sudo systemctl restart pagekite.service

これで、 + localhost`で、SSHを介して + remote-host`に接続できます:

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

ドメイン `+ client-2.pagekite。+`を別のクライアントに使用できます。 このようにして、1つのクライアントのパスワードを変更したり、他のクライアントに影響を与えずにそれらの1つを無効にしたりすることができる、孤立した方法でサービスを管理できます。

結論

この記事では、Debian 9ドロップレットにプライベートPageKiteフロントエンドサーバーをセットアップし、それを使用して、NATの背後にあるリモートホスト上のHTTPおよびSSHサービスを公開しました。 次に、これらのサービスに「+ local-host +」サーバーから接続し、PageKiteの機能を検証しました。 前述したように、VNCなどのSSH接続で他のサービスをトンネリングできるため、これはリモートアクセスアプリケーションの効果的なセットアップになります。

PageKiteの詳細については、https://pagekite.net/support/intro/ [PageKiteサポート情報]をご覧ください。 Dropletsを使用したネットワーキングの詳細については、https://www.digitalocean.com/docs/networking/ [DigitalOcean’s Networking Documentation]をご覧ください。