質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

2回答

2548閲覧

踏み台サーバを用いた自宅サーバの公開方法

rainbowbook

総合スコア2

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2021/08/11 07:31

前提・実現したいこと

踏み台サーバを利用して、自宅(アパート)にあるwebサーバを公開しようとしています。
具体的には、外部からhttp://a.b.c.d:8800/webpage/にアクセスすると、自宅サーバの192.0.0.1:80/webpage/にあるウェブページを表示したいです。

自宅サーバ(192.0.0.1(プライベートIPアドレス))
↑↓{sshトンネルで接続
踏み台サーバ(a.b.c.d(グローバルIPアドレス))
↑↓
インターネット

発生している問題・エラーメッセージ

sshのリモートポートフォワーディングを利用して実現しようとしていますが、うまくいきません。

試したこと

自宅サーバ上で ssh -i keyfile.pem fumidai@a.b.c.d -R 8800:localhost:80 -N を実行しましたが、インターネットから接続できません。タイムアウトします。

補足情報

自宅サーバのOSはrasberrypi os , 踏み台サーバのosはdebianです。
踏み台サーバの8800ポートと自宅サーバの80ポートは空いています。
自宅で192.0.0.1/webpage/にアクセスすると、正しくウェブページが表示されます。

そもそも、リモートポートフォワーディングで実現できるのでしょうか。
他の良い方法があれば、他の方法でも問題ありません。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2021/08/11 07:41

踏み台サーバーは具体的にどこにあるサーバーですか?自宅内?
rainbowbook

2021/08/11 08:21

踏み台サーバにはAmazon Lightsailを利用しています。 VPSです。
y_waiwai

2021/08/11 08:34

自宅サーバからそのVPSへはSSH接続できるんでしょうか
rainbowbook

2021/08/11 08:52

はい、ssh接続は問題ありません。 VPSを問題なく操作できます。
mather

2021/08/11 09:05 編集

コメントを書きましたが、ちょっと間違ってたので無視してください。
guest

回答2

0

ベストアンサー

OpenSSHのリモートポートフォワーディングでは、転送するポートにアクセスできるのはデフォルトでは踏み台サーバ自身のみとなっています。

例えばssh -i keyfile.pem fumidai@a.b.c.d -R 8800:localhost:80で踏み台サーバにログインし、ss -lt を実行すると

State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* LISTEN 0 128 127.0.0.1:8800 0.0.0.0:* LISTEN 0 128 [::]:ssh [::]:* LISTEN 0 128 [::1]:8800 [::]:*

というようにポート8800はアドレス127.0.0.1(と[::1])でのみ待ち受けるようになっている事が確認出来ます。
他のホストからもポート8800へのアクセスを受け付けるようにするには、sshと同じようにすべてのアドレスを表す0.0.0.0で待ち受けるようにするか、アドレスを個別に指定してa.b.c.dで待ち受けるようにする必要があります。

sshd_configの変更

sshdはデフォルトではリモートポートフォワーディング時の待ち受けるポートを変更できないようになっています。これを変更できるようにするには、/etc/ssh/sshd_configを編集し、GatewayPortsclientspecifiedに変更します。

#GatewayPorts no

変更後:

GatewayPorts clientspecified

編集が終わったらsystemctl restart ssh.serviceでsshdを再起動します。

注: Google等で検索するとGatewayPortsyesにする方法が紹介されている事が有りますが、この設定は望ましくないので、特別な理由がなければclientspecifiedを使うようにしてください。

待ち受けアドレスの指定方法

GatewayPortsを変更しただけでは、リモートポートフォワーディング時の待ち受けポートは変わりません。
変える為には、ssh接続時に以下のようにサーバ側での待ち受けポートを指定する必要が有ります。

ssh -i keyfile.pem fumidai@a.b.c.d -R 0.0.0.0:8800:localhost:80 -N

これで踏み台サーバ上で0.0.0.0:8800で待ち受けるようになるはずです。

他の原因

自宅サーバ上で ssh -i keyfile.pem fumidai@a.b.c.d -R 8800:localhost:80 -N を実行しましたが、インターネットから接続できません。タイムアウトします。

タイムアウトするというのはちょっと気になりますね。待ち受けアドレスの問題ならば通常はタイムアウトではなくて接続が拒否されます。
本当にタイムアウトしているならば、上記の待ち受けアドレスの問題の他にネットワークの問題が有ると思われます。
その場合はファイアウォール等で接続を止めていないか確認してみてください。

他の方法

sshのリモートポートフォワーディングを使う場合、ssh接続していない間は接続出来なくなるという問題が有ります。
本格的にやるならば自宅サーバと踏み台サーバの間でVPNを張って、踏み台サーバ上でリバースプロキシを動かすという方法を取る事になると思います。

ただ、手軽にやるならばsshのリモートポートフォワーディングを使うのも悪くは無いと思います。

投稿2021/08/11 08:53

doda

総合スコア947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rainbowbook

2021/08/11 09:18 編集

教えてもらった手順を試すと、以下のようになりました。 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:8800 0.0.0.0:* LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* LISTEN 0 128 [::]:ssh [::]:* ただ、相変わらずERR_CONNECTION_TIMED_OUTとなります。 踏み台サーバの方でcurl 0.0.0.0:8800/webpage/を実行すると、正しくデータを取得できていることが 分かりました。問題はネットワークから踏み台サーバへの接続ですかね?firewall は To Action From -- ------ ---- 80 ALLOW Anywhere 22 ALLOW Anywhere 8800 ALLOW Anywhere 80 (v6) ALLOW Anywhere (v6) 22 (v6) ALLOW Anywhere (v6) 8800 (v6) ALLOW Anywhere (v6) となっています。 他に何が問題か分かりますか?
rainbowbook

2021/08/11 09:21

ファイアウォールの設定を見た押したところ、debian側は問題なく、lightsailのファイアウォールでとめられていました。 無事アクセスすることができました。 ありがとうございます。
rainbowbook

2021/08/11 09:47 編集

インターネット⇔amazon lightsailのファイアウォール?⇔debianのファイアウォール⇔自宅サーバ のところで、「amazon lightsailのファイアウォール?」の8800ポートを許可するとうまくいきました。
guest

0

直接の回答ではないですが、自宅サーバーを外部から個人的に利用する程度であれば、ngrokが楽です。
自分で外部にサーバーを借りる必要も無い。

参考:https://www.google.com/search?q=ngrok

投稿2021/08/11 08:35

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rainbowbook

2021/08/11 08:58

Webページ公開には便利そうですね。言ってなかったですが、私は今後マイクラサーバなども作ろうと思っています。ですのでできれば外部からのパケットを自宅サーバに送る方法を取りたいです。回答ありがとうございます。
otn

2021/08/11 09:51

> 外部からのパケットを自宅サーバに送る方法を取りたいです。 それを実現するのがngrokですけど、誤解してませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問