+++ date = "2018-07-28" tags = ["ios"] title = "iosでwanからsshする" slug = "ios-ssh" +++ ## 導入 外部ネットワーク、つまり、WANから自宅サーバーにアクセスする場合、どのような手段が使えるでしょうか。 まず思いつくのが、スマホでアクセスするという方法ですよね。 スマホはいつも持ち歩いていますからね。それに、回線もつながっています。通常は。 私の場合は、iosの`termius`というアプリを使っているのですが、これはいいですね。 ということで、まずは簡単な接続方法から。 ## WAN ### ios:termius 通常、自宅のネットワークはルーターからWANに繋いでると思います。 ここで、ルーターのアドレスは、各種端末から見て、`192.168.x.1`などのローカルIPが割り振られてると思います。 この場合、ルーターが一つのグローバルIPを持ち、WAN側から自宅サーバーに接続するとして、そのグローバルIPにアクセスするわけですが、通常は、ファイアウォールなどが設定されているため、アクセスできませんよね。 ということで、特定のポートに穴を開けて、そこを通ることになるわけですが、ルータの設定でポート変換などを行い、特定のローカル端末(ローカルIP)の特定のポートにつなぐのが通常のやり方だと思います。 それができたら、次は、サーバーにてルーターのグローバルIPを通知する手段などを確立した後、こういうのはcronとかでスクリプトを動かして、mailに送ったりすればいい感じなのですが、そんな感じで通知するとして、iosのtermiusで、`hostname:global-ip,port:router`みたいな感じで設定します。あと、サーバーの鍵は必要になると思いますので(sshで鍵アクセスのみ許可してる場合ですが)、iosのファイルアプリに`.txt`を置いたり、dropboxなどで一時的に共有するみたいな感じで、鍵の文字列を取得して、termiusに貼り付けましょう。 ### DDNS ちなみに、DDNSなどを利用することによって、一応、ルーターのグローバルIPを名前解決することはできます。私はあまり利用しませんけどね。 名前解決というのは、例えば、サーバーのグローバルIPが変わったとしても(グローバルIPはよく変動します)、そのアドレス(URLみたいなものを想起するとわかりやすいgithub.comみたいな感じ)を知っていればそれを使ってアクセスできるようになるという感じです。 例えば、皆様がよく行くサイト、あれ単なるWebサーバーですからね。Webサーバーにもネットワークに繋がっている以上、当然ながらグローバルIPがあり、そのグローバルIPでもアクセスできます。`$ dig github.com`みたいな感じでやってみてください。関係ありませんが、`$ whois github.com`とかやればドメインの所有者情報を調べられたりもします。名前解決というのはこんな感じのものを言います。 話がそれましたが、まあ、そんな感じで名前解決できなくはないですが、私はあまりやりませんね。 ### テザリング 大体の接続の方法が分かったと思うので、これと同じ要領でパソコンからも接続できます。 ただし、パソコンは、外ではネットワーク回線を持ってませんよね。通常は。 街中のWi-Fiを使ってもいいですが、色々と準備がない段階では危険です。あと何で日本の街中にあるWi-Fiってあんな使いにくいんでしょうか。 ということで、スマホの回線を使って接続するのが一般的かな。iosではネットワーク共有と言うやつですね。テザリングともいいますが。 これは、説明するまでもなく適当にやれば大丈夫でしょう。ちなみに、テザリングする人は、docomo回線がいいらしいですね。 ### Wi-Fi なぜ街中のWi-Fiが危険なのかと言うと、暗号化されていない場合、パケットが丸見えですし、また、パケットが丸見えですと、通信内容からパスワードなどを読み取られてしまう危険があるからです。その他にも色々ありますが。 で、こういった場合どうすればいいのかと言うと、通常は、VPNを通します。 これは、他人が提供しているVPN Serverを使ってもいいし、自分で立ててもいいと思います。そんな感じで。 反対に、Wi-Fiではなくスマホ回線を使う場合は、VPNは、あまり必要ない気がしますが、例えば、あるサイトにアクセスするとして、そこの管理者に個人情報を取られたくない場合などは、VPNとかを利用したほうがいいかもですね。global ipなども重要な個人情報になりますので。 ただし、この場合、自分のVPNサーバーを使う事はできませんので、外部VPNを使うことになります。webサイトにアクセスすると、使用してるvpnサーバーのglobal ipで接続することになるので。 なんか話がそれてしまいましたが、termiusとかテザリングとかvpnとか便利ですよね。 ### 踏み台 あと、WANからアクセスできるようにするサーバーは、最小構成にして、sshの踏み台として利用するのがいいかもですね。 ![](https://raw.githubusercontent.com/syui/img/master/old/ios-termius-ssh-global.png) (img : iosのdocomo回線から踏み台を経由して、windowsのpwshにsshしている様子) これはWANからアクセスできる鍵を持つユーザーとは別に新たなユーザーを作り、パスワード保護した上で、そのユーザーの元に他のローカルサーバーの各鍵を置くみたいな構成になるかと思います。 まあ、ssh自体を鍵アクセス限定にしている以上、それほどの危険性はないかもしれませんが、このようにすることで、セキュリティ上の危険性を軽減できると思います。 他には、SELinuxとかiptableとかですかね。基本的なのは。