直接名前でアクセス
IDCF Cloudでは、仮想マシンを作成するときに仮想マシン名を指定することができます。あまり知られていませんが、ゾーン内の仮想マシンではこれらの名前解決が出来るようになっていて、IPを覚えていなくてもアクセスできたりします。
[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
)はゾーン毎に違うのでご注意ください。
# 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を指定できるようなので、それでも良いかもしれません。
/Applications/Firefox.app/Contents/MacOS/firefox-bin -p
新しいプロファイルを作ります。「今後このプロファイルを使用する」のチェックを外します。
起動したら、「設定 -> 詳細 -> ネットワーク -> 接続設定」から次のようにSocksを設定します。
「SOCKS v5 を使用するときはDNSもプロキシを使用する」のチェックをお忘れなく。
これで、IDCF Cloudの仮想マシンに直接アクセスすることが出来ます。
URLの欄を見てください!http://hdp1.cs3cidcfcloud.internal:8080/#/login
とIDCF Cloud内のDNS名でアクセスできています!
ついでにssh接続
どれか1台にはsshできる、ssh-agentが設定されている(この説明は省略)ことが条件になります(厳密には他にもあるけど)が、これでsshも1台のssh server経由で、内部のどのsshへもログインできるようになります。
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
へ秘密鍵を置く必要がない。)