IDCF Cloudの内部DNS名にブラウザで直接アクセス(小ネタ)

# 直接名前でアクセス
[IDCF Cloud](https://www.idcf.jp/cloud/)では、仮想マシンを作成するときに仮想マシン名を指定することができます。あまり知られていませんが、ゾーン内の仮想マシンではこれらの名前解決が出来るようになっていて、IPを覚えていなくてもアクセスできたりします。

```shell-session:こんな感じ(IDCF_Cloud上のVMで実行)
[root@step-lux ~]# dig +noall +answer hdp1
hdp1.			0	IN	A	10.32.0.193

[root@step-lux ~]# hostname -f
step-lux.cs3cidcfcloud.internal

[root@step-lux ~]# dig +noall +answer step-lux.cs3cidcfcloud.internal
step-lux.cs3cidcfcloud.internal. 0 IN	A	10.32.0.129

[root@step-lux ~]# ping -c 2 hdp1
PING hdp1.cs3cidcfcloud.internal (10.32.0.193) 56(84) bytes of data.
64 bytes from hdp1.cs3cidcfcloud.internal (10.32.0.193): icmp_seq=1 ttl=64 time=0.095 ms
64 bytes from hdp1.cs3cidcfcloud.internal (10.32.0.193): icmp_seq=2 ttl=64 time=0.110 ms

--- hdp1.cs3cidcfcloud.internal ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.095/0.102/0.110/0.012 ms
```

これは、DHCPで設定されるResolver(仮想ルータのアドレスが設定されます)がよろしく名前解決してくれています。
ちなみに、ドメイン名部分(上述だと`cs3cidcfcloud.internal`)はゾーン毎に違うのでご注意ください。

```:/etc/resolv.conf
# Generated by NetworkManager
search cs3cidcfcloud.internal
nameserver 10.32.0.1
nameserver xxx.xxx.xxx.xxx
nameserver yyy.yyy.yyy.yyy
```

# 通常の外からのアクセス
[IDCF Cloud](https://www.idcf.jp/cloud/)は、内部がPrivate Networkなので、外からアクセスする場合は、[スタティックNAT](https://www.idcf.jp/help/cloud/guide/nw_nat.html)するか、[ポートフォワード](https://www.idcf.jp/help/cloud/guide/nw_portforward.html)設定して、[ファイアウォール](https://www.idcf.jp/help/cloud/guide/fw.html)でアクセス許可しますよね。これって検証利用でちょっと立てたサーバとかだど、毎回やるの結構面倒ですよねぇ。

# SSHでSocksサーバ
ということで、SSHでローカルにSocksサーバを立ち上げて、内部のDNS名(上述の`xxx.cs3cidcfcloud.internal`)で直接アクセスしてしまいましょう。
「でも、sshで入れないとダメなんでしょう？同じじゃね？」的な話もあるかもしれませんが、まぁ、少なくともどれか1台ぐらいはsshで入れるように設定しますよね？普通。どれか1台にsshできれば、そっから先はその1台経由でアクセスできるので大丈夫です。

```shell-session:ということで、こんな感じ
N1407A008-K:~ hal-k$ ssh -D 1080 root@xxx.xxx.xxx.xxx
```

`xxx.xxx.xxx.xxx`のIPアドレスはIDCF Cloud側のIPアドレスです。
ただ、これだとオプションが寂しいので、次の感じがおすすめです。

```shell-session:お勧めオプション
N1407A008-K:~ hal-k$ ssh -CqTnNf -D 1080 root@xxx.xxx.xxx.xxx
```

* `-C` データを圧縮する
* `-q` Quiet mode
* `-T` pseudo-terminal(疑似端末)を割り当てない
* `-n` 標準入力を読み取らない
* `-N` リモートコマンドを実行しない
* `-f` バックグラウンドで実行する

特に、`-C`のデータ圧縮は結構効果あるのでお勧めです。
これで、ローカルポートの`1080`でSocks5 Serverが立ち上がりましす。超簡単ですね。

MacとLinuxはこれでOKです。試していませんが、Windowsの[putty](http://www.chiark.greenend.org.uk/~sgtatham/putty/)でもSocksになれるようなので、多分同じよに出来ると思います。

# ブラウザの設定
後は、ブラウザのProxy設定で、Socks5経由でアクセスする設定をすれば完了です。ちなみに、ブラウザはFirefoxがお勧めです。FirefoxはOSのネットワーク設定を使わずに独自でSocks5の設定が出来て、かつ、Socksありとなしのプロファイルを切り替えて使うことが出来ます。
ChromeはコマンドラインでProxyを指定できるようなので、それでも良いかもしれません。

```:プロファイルを作る。-pでFirefoxを起動
/Applications/Firefox.app/Contents/MacOS/firefox-bin -p
```

![スクリーンショット 2016-12-01 14.37.51.png](https://qiita-image-store.s3.amazonaws.com/0/16163/03bbe704-9f32-6ff7-d213-17de6065a303.png)

新しいプロファイルを作ります。「今後このプロファイルを使用する」のチェックを外します。

起動したら、「設定 -> 詳細 -> ネットワーク -> 接続設定」から次のようにSocksを設定します。

![スクリーンショット 2016-12-01 14.42.05.png](https://qiita-image-store.s3.amazonaws.com/0/16163/0a7a1f5e-c68d-ff4a-8f22-1e667e4ada45.png)

「SOCKS v5 を使用するときはDNSもプロキシを使用する」のチェックをお忘れなく。

これで、IDCF Cloudの仮想マシンに直接アクセスすることが出来ます。
![スクリーンショット 2016-12-01 14.45.54.png](https://qiita-image-store.s3.amazonaws.com/0/16163/9c97fe40-628b-9f88-24ed-55d297cf91c6.png)
URLの欄を見てください！`http://hdp1.cs3cidcfcloud.internal:8080/#/login`とIDCF Cloud内のDNS名でアクセスできています！

# ついでにssh接続
どれか1台にはsshできる、ssh-agentが設定されている(この説明は省略)ことが条件になります(厳密には他にもあるけど)が、これでsshも1台のssh server経由で、内部のどのsshへもログインできるようになります。

```~/.ssh/configを用意する
ForwardAgent yes

Host step-lux
  HostName 210.140.46.123
  User root

Host *.cs3cidcfcloud.internal
  ProxyCommand ssh -W %h:%p step-lux
```

これで、`step-lux`経由で`xxxx.cs3cidcfcloud.internal`へssh loginできます。

```shell-session
[hal-k@fedora ~]$ ssh root@hdp1.cs3cidcfcloud.internal
The authenticity of host 'hdp1.cs3cidcfcloud.internal (<no hostip for proxy command>)' can't be established.
ECDSA key fingerprint is SHA256:WSoXFBNgawl6bBIv6iOzOqG/AURZdw+6ea21HGZH+KA.
ECDSA key fingerprint is MD5:9a:58:18:e2:56:17:79:82:04:05:0f:97:7e:97:43:46.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hdp1.cs3cidcfcloud.internal' (ECDSA) to the list of known hosts.
Last login: Thu Dec  1 15:07:04 2016 from step-lux.cs3cidcfcloud.internal
    ________  ______   ______                 __  _          
   /  _/ __ \/ ____/  / ____/________  ____  / /_(_)__  _____
   / // / / / /      / /_  / ___/ __ \/ __ \/ __/ / _ \/ ___/
 _/ // /_/ / /___   / __/ / /  / /_/ / / / / /_/ /  __/ /    
/___/_____/\____/  /_/   /_/   \____/_/ /_/\__/_/\___/_/     
                                                             
[root@hdp1 ~]# 
```

ForwardAgentも使っているため、手元のssh秘密鍵だけで全部のサーバへログインできます。セキュアだし便利です。(踏み台にしている、`step-lux`へ秘密鍵を置く必要がない。)