21
漢のPort Forwarding 2014/2/19 Minoru Nakata / 株式会社ゆめみ

漢のPort forwarding

Embed Size (px)

DESCRIPTION

社内勉強会用、初心者想定

Citation preview

Page 1: 漢のPort forwarding

漢のPort Forwarding2014/2/19!

Minoru Nakata / 株式会社ゆめみ

Page 2: 漢のPort forwarding

index

• IPアドレスとPort番号(おさらい)!

• Port Forwardingとは?!

• SSH Port Forwarding?!

• Local ForwardとRemote Forward!

• Local Forwardの仕組みと利用例!

• Remote Forwardの仕組みと利用例!

• Dynamic Forwardとその他応用

Page 3: 漢のPort forwarding

IPアドレスとPort番号

• インターネットのサービスは、番地と窓口で区別されている!

• IPアドレス: サーバの番地、住所!

• Port番号: サーバ内の窓口

Page 4: 漢のPort forwarding

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

Page 5: 漢のPort forwarding

Port Forwardingとは?

あるAddress/Portに送られたデータを別のAddress/Portに転送(Forwarding)すること!

!

NATルーター等、様々なところで利用されている

Page 6: 漢のPort forwarding

SSH Port Forwarding?

SSHを用いたPort Forwarding!

Secure SHellだけど、shellだけではない!

通信路を暗号化したり、通常はネットワーク的に到達できない所を通したりする目的で使う!

!

これを知ってると、結構やりたい放題!

Page 7: 漢のPort forwarding

Local ForwardとRemote Forward

向きによって2つのPort Forwardがある!

• Local Forward!

• 非常によく使う(ほとんどはコレ)!

• localhostのPortを指定サーバの指定Portに転送!

• Remote Forward!

• あまり出番はないが、知っておくと意外と便利!

• 相手サーバのPortを指定サーバの指定Portに転送

Page 8: 漢のPort forwarding

自分が行いたい通信を相手に代行してもらう

Local Forwardの仕組み

localhostport 1234

sshhost remotehost

port X (自動決定)

port 5678

ssh -L 1234:remotehost:5678 sshhost

SSHトンネル

remotehostから見ると、sshhost:X から接続されている

Page 9: 漢のPort forwarding

Local Forwardの使用例

localマシンからサーバ上のMySQLに接続したい!(当然localから直接は繋がらない)!!サーバ: devhost!MySQL: devhost上のport:3306で動作、localhostからのみ接続可

ssh -L 13306:localhost:3306 devhost

localhost:13306に接続すればOK!

devhostからみた場所

Page 10: 漢のPort forwarding

Local Forwardの使用例

出先から社内のマシンにアクセスしたい!!

Windows: リモートデスクトップ(RDP)3389!Mac: 画面共有(VNC)5900

ssh -L 13389:自分のIPアドレス:3389 gateway!ssh -L 15900:自分のIPアドレス:5900 gateway

localhost:13389/15900に接続すればOK!

Page 11: 漢のPort forwarding

相手が受けた通信を自分が代行する

Remote Forwardの仕組み

localhostport 1234

sshhostremotehostport 5678

ssh -R 1234:remotehost:5678 sshhost

SSHトンネル

remotehostから見ると、localhost:X から接続されている

port X (自動決定)

Page 12: 漢のPort forwarding

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 に接続

Page 13: 漢のPort forwarding

Remote Forwardの使用例

一時的に外部サーバに来たアクセスを自分の開発環境に向けたい!!

開発サーバ/ポート: devhost:8080!local開発サーバ/ポート: mydevhost:18080

ssh -R 8080:mydevhost:18080 devhost

devhost:8080に接続するとmydevhost:10080に来る!

localhostからみた場所

Page 14: 漢のPort forwarding

Dynamic Forward

• SSHをSOCKSプロキシとして動作させる!• http://ja.wikipedia.org/wiki/SOCKS!!

• アプリケーションレベルの制御で、Forward先が変化する!

• アクセス制限されたwebサーバ等に接続するには、Local Forwardより使い勝手が良い

Page 15: 漢のPort forwarding

Dynamic Forwardの使用例

社内gitlabに外部からアクセスしたい!!

gitlabは社内アクセスのみ許可!gatewayからは接続可能

ssh -D 10080 gateway

後はブラウザの設定で、SOCKSプロキシを localhost:10080にすればOK!

Page 16: 漢のPort forwarding

応用:多段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を潰してしまうこと

Page 17: 漢のPort forwarding

応用:多段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重に暗号化通路を通ること

Page 18: 漢のPort forwarding

おまけ:Local/Romote Forwardの連携例

自宅のiTunesライブラリを外部のiTunesから聞く

port 36890sshhosthome

port 3689

ssh -R36890:localhost:3689 sshhost

Step:1 home から sshhost へ Remote Forward

Page 19: 漢のPort forwarding

おまけ:Local/Romote Forwardの連携例

自宅のiTunesライブラリを外部のiTunesから聞く

port 36890sshhost

ssh -L36890:localhost:36890 sshhost

Step:2 localhost から sshhost へ Local Forward

localhostport 36890

homeport 3689

Page 20: 漢のPort forwarding

おまけ: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

Page 21: 漢のPort forwarding

Forwardingを使いこなすにはsshコマンドが基本!!~/.ssh/configを使うとその他様々な設定が可能!

!Windowsな人はPuTTYを捨ててzsh!もしくは、Macに移行しよう