Upload
minoru-nakata
View
1.819
Download
0
Embed Size (px)
DESCRIPTION
社内勉強会用、初心者想定
Citation preview
漢のPort Forwarding2014/2/19!
Minoru Nakata / 株式会社ゆめみ
index
• IPアドレスとPort番号(おさらい)!
• Port Forwardingとは?!
• SSH Port Forwarding?!
• Local ForwardとRemote Forward!
• Local Forwardの仕組みと利用例!
• Remote Forwardの仕組みと利用例!
• Dynamic Forwardとその他応用
IPアドレスとPort番号
• インターネットのサービスは、番地と窓口で区別されている!
• IPアドレス: サーバの番地、住所!
• Port番号: サーバ内の窓口
IPアドレス と Port番号Port番号は0-65535!
よく知られたサービスのPortはWell Known Port Numbersと呼ばれ、0-1023の範囲!
FTP:21, SSH:22, SMTP:25, HTTP:80, HTTPS:443 等!
http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml
Port Forwardingとは?
あるAddress/Portに送られたデータを別のAddress/Portに転送(Forwarding)すること!
!
NATルーター等、様々なところで利用されている
SSH Port Forwarding?
SSHを用いたPort Forwarding!
Secure SHellだけど、shellだけではない!
通信路を暗号化したり、通常はネットワーク的に到達できない所を通したりする目的で使う!
!
これを知ってると、結構やりたい放題!
Local ForwardとRemote Forward
向きによって2つのPort Forwardがある!
• Local Forward!
• 非常によく使う(ほとんどはコレ)!
• localhostのPortを指定サーバの指定Portに転送!
• Remote Forward!
• あまり出番はないが、知っておくと意外と便利!
• 相手サーバのPortを指定サーバの指定Portに転送
自分が行いたい通信を相手に代行してもらう
Local Forwardの仕組み
localhostport 1234
sshhost remotehost
port X (自動決定)
port 5678
ssh -L 1234:remotehost:5678 sshhost
SSHトンネル
remotehostから見ると、sshhost:X から接続されている
Local Forwardの使用例
localマシンからサーバ上のMySQLに接続したい!(当然localから直接は繋がらない)!!サーバ: devhost!MySQL: devhost上のport:3306で動作、localhostからのみ接続可
ssh -L 13306:localhost:3306 devhost
localhost:13306に接続すればOK!
devhostからみた場所
Local Forwardの使用例
出先から社内のマシンにアクセスしたい!!
Windows: リモートデスクトップ(RDP)3389!Mac: 画面共有(VNC)5900
ssh -L 13389:自分のIPアドレス:3389 gateway!ssh -L 15900:自分のIPアドレス:5900 gateway
localhost:13389/15900に接続すればOK!
相手が受けた通信を自分が代行する
Remote Forwardの仕組み
localhostport 1234
sshhostremotehostport 5678
ssh -R 1234:remotehost:5678 sshhost
SSHトンネル
remotehostから見ると、localhost:X から接続されている
port X (自動決定)
Remote Forwardの使用例
外部通信ができないサーバでyum updateしたい!!サーバ: devhost!repo baseurl: http://localhost:8080/...!実際のrepoサーバ/ポート: repohost:80!
ssh -R 8080:repohost:80 devhost
yum updateで localhost:8080 -> repohost:80 に接続
Remote Forwardの使用例
一時的に外部サーバに来たアクセスを自分の開発環境に向けたい!!
開発サーバ/ポート: devhost:8080!local開発サーバ/ポート: mydevhost:18080
ssh -R 8080:mydevhost:18080 devhost
devhost:8080に接続するとmydevhost:10080に来る!
localhostからみた場所
Dynamic Forward
• SSHをSOCKSプロキシとして動作させる!• http://ja.wikipedia.org/wiki/SOCKS!!
• アプリケーションレベルの制御で、Forward先が変化する!
• アクセス制限されたwebサーバ等に接続するには、Local Forwardより使い勝手が良い
Dynamic Forwardの使用例
社内gitlabに外部からアクセスしたい!!
gitlabは社内アクセスのみ許可!gatewayからは接続可能
ssh -D 10080 gateway
後はブラウザの設定で、SOCKSプロキシを localhost:10080にすればOK!
応用:多段Forwarding
接続したいサーバが奥底過ぎてForward 1回じゃ届かねぇ!!!
gateway -> ec2-web -> rds-db!rds-dbはec2-webからしか繋がらないssh -t -L13306:localhost:13306 gateway \!
ssh -L13306:rds-db:3306 ec2-web
gateway:13306を中継してsshでchain 難点は、gateway:13306を潰してしまうこと
応用:多段Forwarding
接続したいサーバが奥底過ぎてForward 1回じゃ届かねぇ! 別の方法!!
gateway -> ec2-web -> rds-db!rds-dbはec2-webからしか繋がらない
ssh -L10022:ec2-web:22 gateway!ssh -L13306:rds-db:3306 -p10022 localhost
一旦ec2-webに直接sshできるようにする 2つ目のsshで直接localhost:13306をrdsへ 難点は、2重に暗号化通路を通ること
おまけ:Local/Romote Forwardの連携例
自宅のiTunesライブラリを外部のiTunesから聞く
port 36890sshhosthome
port 3689
ssh -R36890:localhost:3689 sshhost
Step:1 home から sshhost へ Remote Forward
おまけ:Local/Romote Forwardの連携例
自宅のiTunesライブラリを外部のiTunesから聞く
port 36890sshhost
ssh -L36890:localhost:36890 sshhost
Step:2 localhost から sshhost へ Local Forward
localhostport 36890
homeport 3689
おまけ:Local/Romote Forwardの連携例
自宅のiTunesライブラリを外部のiTunesから聞く
Step:3 Network Beaconを使ってlocalhost:36890を DAAPサービスとしてBonjourに認識させる http://www.chaoticsoftware.com/ProductPages/NetworkBeacon.html
port 36890sshhost localhost
port 36890
homeport 3689
Forwardingを使いこなすにはsshコマンドが基本!!~/.ssh/configを使うとその他様々な設定が可能!
!Windowsな人はPuTTYを捨ててzsh!もしくは、Macに移行しよう