たまたま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コマンドで経路設定するなど。
おおぉぉぉ~、知ってると便利かもしれない。
0 件のコメント:
コメントを投稿