Ubuntu16.04でプライベートIPアドレスだけでサーバ構築
説明
eo光のホームタイプで契約しており、自宅で機械学習用のサーバを建てたいなとなった思った。どこからでもノートパソコンで自宅のサーバにアクセスして計算を回せるといいなあ。ってことで調べてみたら、グローバルIPアドレスを追加で取得するには月額4000円もかかるみたいなので、いやだなあ。ってことでプライベートIPアドレスだけでサーバ公開できるようにしたいなということで以下に示すようにやっていった。
ルーターはグローバルIPアドレスを持っている(101.27.214.433<-適当に作っています)。
OS: Ubuntu 16.04
参考サイト
1. Pingの確認
ルータのグローバルIPアドレスでpingがLAN内では通信できて、LAN外になると通信できない
ていうかポートマッピングを利用する場合は固定グローバルIPアドレスサービスへの申し込みが必要とのこと。ではただではできないのでポートマッピング機能を使ってサーバ公開は却下。
2. DMZホスト機能の発見
次にDMZホスト機能というものを用いれば固定アドレスサービスはなしで、サーバ公開できるみたい。 DMZホストとは、外部(インターネット)からアクセス可能となるホストを指定する機能のことを言います。
Step1 DMZホスト機能を有効化する
eo光のルーター設定でDMZ有効化ボタンがあったので有効化にチェックを入れた。
これを行うことでpingが通るようになった。(ping 101.27.214.433)
3. telnet接続
telnet で接続を試みたが、ホストへ接続できませんでした。と出る。
ホスト側のファイアウォールを開放するのを忘れていた。23番ポートを開放するとtelnetが通るようになった。しかし、WAN側からの接続は失敗する。
わからないこと:DMZホスト機能を有効化したあと、LAN内からだとtelnetアクセスが可能なのだが(プライベートIPアドレスを指定することで)、WAN(インターネット)からだとtelnetアクセスの指定アドレスにプライベートアドレスを使用してもわからないよね。どうやって指定すればいいのだろう・・
グローバルIPアドレスへのpingは送れている。
グローバルIPアドレスへのtelnetも行けた。。。あれ?昨日の夜にやったことはホストサーバ側のファイアウォールのポート23(terlnet)を開放した。これで良かったのだろう。でもどうして反映されるのに時間がかかったのだろう(半日くらい)。
windowsのTeratermからtelnetで接続に成功。
4. SSH接続
その理由は以下を参考にしてください。
sudo ufw status
sudo: ホスト farmhouse の名前解決ができません
状態: アクティブ
To Action From
-- ------ ----
2222 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
1194/udp ALLOW Anywhere
3000/tcp ALLOW Anywhere
23 ALLOW Anywhere
3000 ALLOW Anywhere
2150 ALLOW Anywhere
22 ALLOW Anywhere
1194/udp ALLOW OUT Anywhere
sshdのサービスを開始
パッケージの管理を行うためのaptitudeをインストール$ sudo apt-get install aptitude OK
aptitudeを使ってsshを導入$ sudo aptitude install ssh OK
/etc/ssh/sshd_configを編集し、PermitRootLoginの行をPermitRootLogin no
に書き換える
$ sudo /etc/init.d/ssh restart
でsshdのサービスを再起動させる(OK)
Windowsにgit bashをいれた。でもTeraTermでSSH接続できるみたい。
SSH鍵の作成
デスクトップに作成されたTera Termのショートカットアイコンをクリック(あるいはダブルクリック)して起動するとメインウインドウと「新しい接続」ダイアログが表示される(図3)。
ただし、SSH接続で認証に鍵ファイルを利用する場合は事前に鍵を用意しておく必要がある。まだ鍵ファイルを持っていない場合は「新しい接続」ダイアログを閉じて、SSHの鍵ペア(秘密鍵、公開鍵)を作成していただきたい。「設定」メニューから「SSHキー生成」を選択すると図4のダイアログが表示されるので、「キーの種類」にある暗号方式(RSA1、RSA、DSAのいずれか)を選択する。RSA1はSSH1プロトコルで使われる暗号方式で、RSAおよびDSAはSSH2プロトコル用である。
作成した公開鍵は接続先のサーバに登録しておく必要がある。
そこでUSBでサーバに渡しました。ここでサーバ側の処理がいるけど後でやろう。。
/ % /etc/init.d/ssh start
[ ok ] Starting ssh (via systemctl): ssh.service.
サーバへの接続
それではサーバに接続してみよう。まず、Tera Termの「ファイル」メニューから「新しい接続」を選択して「新しい接続」ダイアログを表示する(図5)。このダイアログでは「ホスト名」に接続先のホスト名もしくはIPアドレスを、サービスで「SSH」をチェックする。「SSHバージョン」は接続先のサーバおよび用意した鍵のタイプに合わせて指定していただきたい。以上を設定したら、「OK」をクリックする。
「Tera Term:エラー / 接続が拒否されました」のポップアップ(画像右)が表示されました。
これを見ると問題点1のサーバ側でSSHサービスが未起動であることが問題であることがわかります。そりゃそうだ。公開鍵をサーバ上においただけでなんの設定もしていないんだから.
telnet 22portでログインできない
nmapで調べてみた
nmap 192.168.0.40
Starting Nmap 7.01 ( https://nmap.org ) at 2017-10-16 01:55 JST
Nmap scan report for 192.168.0.40
Host is up (0.00020s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
23/tcp open telnet
2222/tcp open EtherNetIP-1
23番と2222番しか開いていない。ってことは23番でSSH接続したらいけるのか?ー>いけた(teratermで次の画面に行けた)。そこでログインIDとパスワを売っても動作しない。
ssh_configをチェックしよう。そこでポートを23にして、sshのリスタートをやろう。
許可されたポート以外全ての閉鎖
$ sudo ufw default deny
を入れておいた。
ポートが間違っていました。
ssh -p 指定したポート番号 root@192.0.2.1
とすることでログインできました。皆さんありがとうございました。という情報があった。
telnetdとは
http://wa3.i-3-i.info/word13574.html
SSH接続
あとは別のクライアントPCから通常通りSSH接続するだけ$ ssh user@ipアドレス
最後にtelnetdを停止して、ルーターとサーバのtelnet23番ポートを閉鎖する。