2012年3月6日火曜日

いまさら知ったsshの機能

たまたまman sshして知った、ssh(OpenSSH)の機能。



(その1)



~C      Open command line.  Currently this allows the addition of port
        forwardings using the -L, -R and -D options (see above).  It also
        allows the cancellation of existing remote port-forwardings using
        -KR[bind_address:]port.  !command allows the user to execute a
        local command if the PermitLocalCommand option is enabled in
        ssh_config(5).  Basic help is available, using the -h option.



昔のrsh/rloginで使っていたので、「~.」と「~^Z」は知ってって、よく使っていましたが、この「~C」って、うわっ!こんなのあったんだ、と思わず叫びたくなるような機能。sshで接続中に、その場で、ポートフォワーディングの設定を変更できるんですと。そんな機能があっても、よさそうだなと薄々思ってて、本当にあったんだな~、という感じ。



% (sshでログイン中に、~C・・・「~」を押してから大文字のCを押す)
ssh> help
Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward



という感じで、その場で、ポートフォワーディングをしたり、やめたり。



(その2)



SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).



な~んだ、SSHだけで、IPトンネリングしてVPN接続ができちゃうんですね。



IP forwardの設定



FreeBSDだとsysctl net.inet.ip.forwardingや、/etc/rc.confのgateway_enable="YES"ですが、CentOSでも、似たような感じ。



[root@centos /]# sysctl net.ipv4.ip_forward

fnet.ipv4.ip_forward = 1

 

[root@centos /]# grep forward /etc/sysctl.conf

# Controls IP packet forwarding

net.ipv4.ip_forward = 1



/etc/ssh/sshd_configを書き換える。
PermitTunnel yes




リモートホストにログイン
# ssh -l root -v -w 0:1 リモートホスト



ローカルホスト側 (FreeBSD)



# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet6 なんとかかんとか%tun0 prefixlen 64 scopeid 0xa
        nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
        Opened by PID 60048



という感じで、トンネルデバイスができているので、アドレスを割り振る。



# ifconfig tun0 192.168.10.1 192.168.10.2 netmask 255.255.255.252



こんな感じになる。



# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet6 なんとかかんとか%tun0 prefixlen 64 scopeid 0xa
        inet 192.168.10.1 --> 192.168.10.2 netmask 0xfffffffc
        nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
        Opened by PID 60048



リモートホスト側 (CentOS)



[root@centos ~]# ifconfig tun1 192.168.10.2 pointopoint 192.168.10.1 netmask 255.255.255.252
[root@centos ~]# ifconfig tun1
tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 
          inet addr:192.168.10.2  P-t-P:192.168.10.1  Mask:255.255.255.252
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:257 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:21564 (21.0 KiB)  TX bytes:1092 (1.0 KiB)



最初sshのマニュアルに書いてあったように、ifconfig tun1 192.168.10.2 192.168.10.1 netmask 255.255.255.252 とかやっていたけど、ifconfigの書式がこれじゃなかった。



あとは必要に応じて、routeコマンドで経路設定するなど。



おおぉぉぉ~、知ってると便利かもしれない。





20120305





0 件のコメント:

コメントを投稿