Posted at

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

More than 1 year has passed since last update.


直接名前でアクセス

IDCF Cloudでは、仮想マシンを作成するときに仮想マシン名を指定することができます。あまり知られていませんが、ゾーン内の仮想マシンではこれらの名前解決が出来るようになっていて、IPを覚えていなくてもアクセスできたりします。


こんな感じ(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は、内部がPrivate Networkなので、外からアクセスする場合は、スタティックNATするか、ポートフォワード設定して、ファイアウォールでアクセス許可しますよね。これって検証利用でちょっと立てたサーバとかだど、毎回やるの結構面倒ですよねぇ。


SSHでSocksサーバ

ということで、SSHでローカルにSocksサーバを立ち上げて、内部のDNS名(上述のxxx.cs3cidcfcloud.internal)で直接アクセスしてしまいましょう。

「でも、sshで入れないとダメなんでしょう?同じじゃね?」的な話もあるかもしれませんが、まぁ、少なくともどれか1台ぐらいはsshで入れるように設定しますよね?普通。どれか1台にsshできれば、そっから先はその1台経由でアクセスできるので大丈夫です。


ということで、こんな感じ

N1407A008-K:~ hal-k$ ssh -D 1080 root@xxx.xxx.xxx.xxx


xxx.xxx.xxx.xxxのIPアドレスはIDCF Cloud側のIPアドレスです。

ただ、これだとオプションが寂しいので、次の感じがおすすめです。


お勧めオプション

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でも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

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

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

スクリーンショット 2016-12-01 14.42.05.png

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

これで、IDCF Cloudの仮想マシンに直接アクセスすることが出来ます。

スクリーンショット 2016-12-01 14.45.54.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できます。

[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へ秘密鍵を置く必要がない。)