ubuntu自宅サーバにsshで外部からアクセス
自宅サーバを構築したいと思います.
まず最初のステップとして,sshで外部からアクセスできるようにします.
以前さくらVPSを借りてsshでログインできるようにした記事を参考に行います.
今回は自宅サーバで固定IPを取得しないのでDDNSというサービスを使っていきます.
サーバ
まずは,ssh-serverを導入します.端末を起動させて,以下でインストールします.
sudo apt install openssh-server
次にsshの設定ファイルをいじってパスワード認証を許可にしておきます..
sudo nano /etc/ssh/ssh_config //パスワードによる認証を許可 PasswordAuthentication yes
設定を反映させるためにsshを再起動させます.
service sshd restart
次にクライアント側で鍵を生成していきますが,そのときに公開鍵を送れるようにサーバのIPアドレスを調べておきます.
hostname -I
で設定されているローカルIPアドレスがわかります.
クライアント側
公開鍵と秘密鍵のペアを生成します.
ssh-keygen -t rsa
途中で以下の文章が出てくるので,どのサーバの鍵かわかるように名前を付けます(今回はubuntuという名前を以下でつけました).
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa):~/.ssh/ubuntu
その後,秘密鍵に設定するパスフレーズの入力が求められますが、特に設定しなくてもいいので何も入力せずリターン2回押してスキップします.
ちなみにrsaとは2つの桁数が多い素数をかけ合わせた数の素因数分解が困難であることを利用した暗号化方式です.
次にサーバに公開鍵を送ります.
今回作成した公開鍵(.pubファイル)をUSBでもメールでもscpコマンドでも何でもいいのでサーバに送ります.
下記はscpで送るときの例.Xに先程調べたIPアドレスを入力.
scp ~/.ssh/ubuntu.pub ホスト名@XXX.XXX.XXX.XXX:
サーバ側
公開鍵(.pubファイル)を~/.sshフォルダにauthorized_keysに名前を変えて(.pubも消す)移動させます.
そしてパーミッションを適切なものに設定します.
cat ubuntu.pub >> .ssh/authorized_keys rm id_ras.pub chmod 700 .ssh chmod 600 .ssh/authorized_keys
次にsshの設定ファイルをいじってパスワード認証を不許可にしておきます.
加えてPortを10022など標準の22から変えてセキュリティを上げておきます.
sudo nano /etc/ssh/ssh_config PasswordAuthentication no Port 10022
設定を反映させるためにsshを再起動させます.
service sshd restart
ローカルIPアドレスを固定
今後の手順でポート開放する必要がありますが,開放したローカルIPアドレスが勝手に切り替わってしまうといけないので,
以下のサイトを参考にローカルIPアドレスと固定化します.
ポート開放
私はWimaxだったので,以下でルータに接続して,グローバルIPを取得しました.
http://192.168.179.1
ネットワーク設定→プロファイル設定のプロファイルリストでnosetupを選び,以下情報を入力して新規にプロファイルを作成します.
プロファイル名(任意): Global
APN(接続先情報): wx2.uqwimax.jp
ユーザ名: global@wx2.uqwimax.jp
パスワード: 0000 (ゼロ4つ)
認証タイプ: CHAP
IPタイプ: IPv4
その後,ネットワーク設定→接続設定で新たにつくったプロファイルを選びます.
次にポート開放するために,詳細設定→ポートマッピング設定で追加をし,
LAN側IP:先ほど固定したローカルIP
ポート: 10022など22から変えた数字
優先度:1~50の任意の数字
以上入力したら保存を押します.
グローバルIPアドレスの設定
グローバルIPアドレスを調べます.
www.cman.jp
MyDNSというサイトでドメインを取得します.右上のjoin usから登録し,IDとPassがメールで送られてくるのでログインします.
Free Dynamic DNS (DDNS) for Home Server and VPS etc | MyDNS.JP
そしてDMAIN INFOからドメインを取得します.取得したドメインに対し,IP ADDR DIRECTから先程調べたグローバルIPアドレスをIPv4のところに入力して,ドメインとグローバルIPを紐づけます.
グローバルIPの自動更新
グローバルIPは固定IPでないと自動更新されてしまうのでDDNSで取得したドメインとの紐付けをやり直さないといけません.
それを今回はcronで自動的にやります.
# crontab -e (以下の1行を追加して保存) */10 * * * * wget -q -O /dev/null http://(mydns.jp のマスターID):(mydns.jp のパスワード)@www.mydns.jp/login.html
これで10分おきにMyDNSに対してHTTPリクエストを発行するようになります.
ヘアピンNAT回避
同一のネットワーク内からグローバルIPにアクセスしようとするとルータが対応していないと拒否されてしまいます.
以下で設定しておけば,拒否されなくなるので登録しておきます.
sudo nano /etc/hosts (以下の1行を追加して保存) 固定したサーバのローカルIP MyDNSで取得したドメイン名