Debian9でPageKiteフロントエンドサーバーを設定する方法
序章
プライベートネットワークは通常、 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の紹介に従ってください。
- との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_domain
とclient-2.pagekite.your_domain
、たとえば)、要求を適切にトンネリングします。 - SSHトンネルを介したVNC接続をサポートするVNCクライアントがインストールされたローカルコンピューター。
ステップ1—サーバーのセットアップ
このチュートリアルでは、3つのDigitalOceanドロップレットを使用して次の役割を果たします。 front-end-server
, local-host
、 と remote-host
. これを行うには、最初に設定します local-host
と remote-host
グラフィカル環境にアクセスし、の動作を模倣するまで remote-host
NATの下で、PageKiteをそのサービスにアクセスするためのソリューションとして使用できるようにします。 それに加えて、 front-end-server
Dropletファイアウォールルールにより、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を使用してグラフィカル環境へのアクセスを設定します。 その後、3つのドロップレットのそれぞれでファイアウォール構成をカバーして、 front-end-server
PageKiteを実行し、NATを使用して接続を模倣するには remote-host
.
依存関係のインストール
両方のグラフィカルインターフェイスにアクセスする必要があります local-host
と remote-host
このデモンストレーションを実行するホスト。 の上 local-host
、VNCセッションを使用してそのグラフィカルインターフェイスにアクセスし、ブラウザを使用してセットアップをテストします。 の上 remote-host
、からアクセスするVNCセッションを設定します local-host
.
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
接続を実行するには、VNCビューアとインターネットブラウザが必要です。 remote-host
. このチュートリアルでは、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コントロールパネルの[ドロップレット]ページに移動してDigitalOceanコンソールにアクセスし、 local-host
ドロップレットをクリックし、右上隅のスイッチの近くにあるコンソールをクリックして、ドロップレットのオンとオフを切り替えます。
コンソールで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
The :1
ホスト名の後は、VNCセッションの番号を表します。 デフォルトでは、セッション番号 1
ポートで実行されます 5901
、セッション番号 2
ポートで 5902
、 等々。 前の出力に続いて、アクセスできます remote-host
VNCクライアントを使用して接続する Remote_Host_Public_IP
ポートで 5901
.
以前の構成の問題の1つは、永続的ではないことです。つまり、ドロップレットを再起動したときにデフォルトで開始されません。 永続化するために、Systemdサービスを作成して有効にすることができます。 そのために、 [email protected]
下のファイル /etc/systemd/system
、を使用して行うことができます nano
:
- sudo nano /etc/systemd/system/[email protected]
次の内容をファイルに入れて、置き換えます sammy
あなたのユーザー名で:
[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のサービスへの外部接続を拒否するようにファイアウォールを構成します。 このチュートリアルでは、ポートを使用します 8000
HTTP接続の場合、 22
SSHの場合、および 5901
VNCの場合、これらのポートへの外部接続を拒否するようにファイアウォールを構成します。
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
有効にすると、アクセスできなくなりますのでご注意ください remote-host
コマンドの出力に記載されているように、SSH経由で:
OutputCommand 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つだけです。
- sudo ufw allow 5901
ファイアウォールルールを変更した後、次を実行して有効にします。
- sudo ufw enable
これで、ローカルマシンで前提条件のVNCクライアントを使用してVNC接続をテストし、接続することができます。 local-host
ポートで 5901
設定したVNCパスワードを使用します。
これを行うには、VNCクライアントを開き、に接続します Local_Host_Public_IP:5901
. パスワードを入力すると、VNCセッションに接続します。
注: VNCセッションへの接続に問題がある場合は、でVNCサービスを再起動してください local-host
と sudo systemctl restart vncserver@1
もう一度接続してみてください。
Xfceは最初の起動時に、環境の初期設定について質問します。
このチュートリアルでは、デフォルトの構成を使用オプションを選択します。
最後に、ポートへの接続を許可する必要があります 80
に front-end-server
、PageKiteで使用されます。 上のターミナルを開く front-end-server
次のコマンドを使用します。
- sudo ufw allow 80
さらに、ポートでのトラフィックを許可します 443
HTTPSの場合:
- 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
効用。 この場合、キーをインポートする必要があります AED248B1C7B2CAC3
キーサーバーから keys.gnupg.net
、これは次のコマンドを実行することで実行できます。
- 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
回線を無効にするには、 #
ファイルのアクティブな行を無効にするには:
#################################[ 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
選択したパスワードを使用して:
#################################[ 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
実行中、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
実行します:
- python3 -m http.server 8000 &
Debian9はデフォルトでPython2を引き続き使用するため、実行してPythonを呼び出す必要があります python3
サーバーを起動します。 終了 &
文字は、コマンドがバックグラウンドで実行されることを示しているため、シェルターミナルを引き続き使用できます。 出力は、サーバーが実行中であることを示します。
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
ドメイン上のHTTPサーバーを公開します remote-host.pagekite.your_domain
以下を実行することにより、 your_domain
と 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
フロントエンドのアドレスを指定します。 ポートを使用していることに注意してください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
:
- 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をクライアントとして設定するには、 front-end-server
ファイル内のアドレスとポート /etc/pagekite.d/20_frontends.rc
. を使用して編集できます nano
:
- sudo nano /etc/pagekite.d/20_frontends.rc
このファイルで、次の行にコメントを付けます defaults
使用を避けるため pagekite.net
サービスのデフォルト。 また、 front-end-server
パラメータを使用したアドレスとポート frontend
、行を追加 frontend = pagekite.your_domain:80
ファイルの最後まで。 必ず交換してください your_domain
使用しているドメインで。
編集した行が強調表示された完全なファイルは次のとおりです。
#################################[ 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
それぞれ。 次に強調表示されているように、構成を有効にするには、ファイルの最後の行もコメントアウトする必要があります。
#################################[ 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用の有効なファイルにコピーすることから始めましょう。
- 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
、次に強調表示されているように、ポート番号を変更する必要があります。
#################################[ 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
HTTPサーバーをエミュレートするPythonモジュール。 手順4でバックグラウンドで実行を開始してから、すでに実行されています。 ただし、何らかの理由で実行されていない場合は、次のコマンドで再開できます。
- 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
:
- cd /etc/pagekite.d
- sudo cp 80_sshd.rc.sample 80_sshd.rc
このファイルは、ポートで実行されているSSHサービスを公開するように事前構成されています 22
、これはデフォルトの構成です。 その内容を見てみましょう:
- nano 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サービスを再起動します。
- 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
同じ名前のパッケージで:
- 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トンネル経由:
- 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
口論:
- 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を実行してから、次のコマンドを実行します。
- vncviewer localhost:5902
提供すると remote-host
VNCパスワード、グラフィック環境にアクセスできるようになります。
注: VNCセッションの実行時間が長すぎると、GUIがオンになっているというエラーが発生する場合があります。 remote-host
灰色の画面に置き換えられます X
カーソル用。 これが発生した場合は、でVNCセッションを再起動してみてください remote-host
と sudo 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_domain
と client2.pagekite.your_domain
異なるパスワードを持つ異なるクライアントのホストを識別するため。
でこれを行うには front-end-server
、を開きます /etc/pagekite.d/20_frontends.rc
ファイル:
- sudo nano /etc/pagekite.d/20_frontends.rc
を使用してドメインを追加します domain
キーワードを設定し、それぞれに異なるパスワードを設定します。 前述のドメインを設定するには、次を追加します。
#################################[ 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
、ファイルを変更します /etc/pagekite.d/10_account.rc
、接続するクレデンシャル front-end-server
保存された:
- sudo nano /etc/pagekite.d/10_account.rc
変化する kitename
と kitesecret
適切な資格情報に。 ドメインの場合 remote-host.client-1.pagekite.your_domain
、構成は次のようになります。
#################################[ 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
、に接続できます remote-host
SSH経由:
- 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のネットワーキングドキュメントをご覧ください。