OpenSSH ��Ȥä��ʰ� VPN �ι���

����

2006ǯ 2��˸������줿 OpenSSH 4.3 (����Ӥ��ΰܿ��� 4.3p1) ���顢 ɸ��ǥȥ�ͥ�󥰥ǥХ��� (tun/tap) �򰷤���ǽ���Ĥ��ޤ����� �����Ȥ��ȡ���ڤ� VPN ���ۤ��뤳�Ȥ��Ǥ��ޤ��� ���ߤΤȤ����ޤ���ǽ�Ϥ����¤�줿��ΤǤ����� ���褫����Ū�� ssh ��ͳ�� NFS �ǥ��쥯�ȥ�� �ޥ���Ȥ���ʤɤ���Ū�˻Ȥ��ޤ��� ����ʸ��ǤϤ��Τ���δ���Ū����ˡ���������ޤ��� OpenSSH ������ȱ��Ѥ��Ǥ���������ǧ�ڤλȤ����� �狼�äƤ��륷���ƥ�����Ԥ��оݤȤ��Ƥ��ޤ���

������ǧ�ڤȤ�: �ѥ���ɤΤ�������̩���ȸ������Υڥ���Ȥ�ǧ����ˡ�Ǥ��� �̾�Υѥ���ɤ�Ȥä�ǧ�ڤǤϡ� ���Ȥ��Ź沽����Ƥ���ȤϤ����ѥ���ɤ��ͥåȥ�����ή��ޤ��� ������ǧ�ڤǤϥѥ���ɤϤޤä��� (�Ź沽���줿���Ǥ���) �ͥåȥ�����ή��ʤ��Τǡ� ������Τۤ��������Ǥ���������������ǧ�ڤǤ�桼���ϥѥ���ɤ����������� (�ѥ��ե졼��) �����Ϥ��ޤ������ѥ����ǧ�ڤȰ㤤����ϥ�������ޥ����� ��̩�������椹�뤿������˻Ȥ�졢�ͥåȥ����ˤ�ή��ޤ���

����: ���ε�ǽ�Ϥޤ��¸��ʳ��Τ��ᡢOpenSSH ��ư��뤹�٤ƤΥץ�åȥե������ư��뤫�ɤ����� ��ǧ����Ƥ��ޤ��� (����ʸ��Ǥϡ�Linux �� FreeBSD �ǥƥ��Ȥ��ޤ���)�� �ޤ����٤�����ʬ�������Ѥ�뤳�Ȥ⤢�ꤨ�ޤ��������Ѥϼ�����Ǥ�ǡ�


OpenSSH ��Ȥä� VPN �������ȷ���

����

����


�ȥ�ͥ�󥰤Τ�����

OpenSSH ��Ȥä� VPN �Ǥ� tun/tap �ǥХ����Ȥ�����Τ�Ȥ��ޤ��� tun/tap �ǥХ����ϥ桼�������֤Υץ�����ब���ѤǤ��벾�ۥͥåȥ���ǥХ����ǡ� ���� tun/tap �ǥХ����򥵡��Фȥ��饤����Ȥ�ξ���dz����� ���δ֤��̿��� OpenSSH ���Ź沽����� VPN ���Ǥ�������ޤ��� ���ΤȤ��� Linux �� *BSD �ǥ��ݡ��Ȥ���Ƥ��ޤ���

tun/tap ��Ȥä��ȥ�ͥ�󥰤� 2�����ʬ�����ޤ��� �ҤȤĤ� tun �ǥХ�����Ȥ���ˡ�ǡ������ Layer 3 (Point-to-Point) �� ���ߥ�졼�Ȥ���IP�ե졼���ž�����ޤ��� ����� PPP �ץ��ȥ����Ȥäƥ����Ф� 1��1 ���̿�����Τ������Ǥ��� VPN ��������ư���Ƥ���ȡ�Linux �ǤϤ���ϼ��Τ褦�˸����ޤ�:

# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:192.168.3.1  P-t-P:192.168.3.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
# ping 192.168.3.2
PING 192.168.3.2 (192.168.3.2) from 192.168.3.1 : 56(84) bytes of data.
64 bytes from 192.168.3.2: icmp_seq=1 ttl=64 time=16.8 ms
64 bytes from 192.168.3.2: icmp_seq=2 ttl=64 time=16.1 ms
64 bytes from 192.168.3.2: icmp_seq=3 ttl=64 time=18.3 ms
...

�⤦�ҤȤĤ� tap �ǥХ�����Ȥ���ˡ�ǡ� ����� Layer 2 (Ethernet) �򥨥ߥ�졼�Ȥ���Ethernet �ե졼���ž�����ޤ��� VPN ��������ư���Ƥ���ȡ�Linux �Ǥϼ��Τ褦�˸����ޤ�:

# ifconfig tap0
tap0      Link encap:Ethernet  HWaddr 00:FF:7F:02:53:D7
          inet addr:192.168.3.1  Bcast:192.168.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
# ping 192.168.3.2
PING 192.168.3.2 (192.168.3.2) from 192.168.3.1 : 56(84) bytes of data.
64 bytes from 192.168.3.2: icmp_seq=1 ttl=64 time=37.6 ms
64 bytes from 192.168.3.2: icmp_seq=2 ttl=64 time=16.1 ms
64 bytes from 192.168.3.2: icmp_seq=3 ttl=64 time=16.6 ms
...

������

OpenSSH �� VPN ��Ȥ��ˤϡ��ʲ��Τ�Τ������Фȥ��饤����Ȥ�ξ����ɬ�פǤ�:

OpenSSH �����̤˥������ޤ��ϥѥå��������饤�󥹥ȡ��뤹��� OK �Ǥ��� tun/tap �ǥХ����ν����ϡ�OS ���Ȥˤ�������ۤʤäƤ��ޤ���

Linux��:

tun/tap �ɥ饤�Фϡ��̾�⥸�塼��η� (�⥸�塼��̾ tun) ���󶡤���ޤ��� �Ƕ�ΤۤȤ�ɤ� Linux �ǥ����ȥ�ӥ塼�����Ǥϡ� ���Υ⥸�塼���ɸ��Ǵޤޤ�Ƥ���Τǡ� ���� /etc/modules.conf �˰ʲ��Τ褦�˽񤤤Ƥ����� OK �Ǥ���

alias tap0 tun
alias tun0 tun

(�����Ǥ� tun/tap �ǥХ����Ȥ��Ƥɤ���⥤�󥿡��ե������ֹ� 0 ��Ȥ��Ȳ��ꤷ�Ƥ��ޤ��� ����ʳ����ֹ��Ȥ�����Ŭ���������Ƥ�������)

��ư�ǥ⥸�塼������������ϡ������ͥ빽�ۤκݤ� "Network Device Support" �� ���� "Universal TUN/TAP device driver support" (CONFIG_TUN) �� �����å��������ɬ�פ�����ޤ��� devfs/udev ��ȤäƤ��ʤ����ϰʲ��Τ褦�ˤ��ƥǥХ����Ρ��� /dev/net/tun ���������ɬ�פ�����ޤ���

# mkdir /dev/net
# mknod /dev/net/tun c 10 200
# chmod 0700 /dev/net/tun

���Ȥϰʲ��Τ褦�ˤ��ƥ⥸�塼�������ɤ��ޤ���

# modprobe tun

tun/tap �ǥХ����ˤĤ��Ƥξܺ٤ϡ�Linux �����ͥ�Υ�������������ˤ��� Documentation/networking/tuntap.txt �򸫤Ƥ���������

FreeBSD��:

FreeBSD �ξ��� conf �ե�������ǥ��ץ���� "device tun" ��ͭ���ˤ��Ƥ����ޤ��� FreeBSD 6.0 �Ǥϡ�ɬ�פʥǥХ����Ρ��ɤ� devfs �ˤ�꼫ưŪ�˺�������ޤ���


���饤����Ȥȥ����Ф����ꤹ��

�ǽ�˷��Ƥ�������:

OpenSSH �� VPN ��Ȥ��ݤ����դ��ʤ���Фʤ�ʤ��Τϡ� �����饤�����¦�� root �ץ��������������Ф� root �Ȥ��ƥ������󤹤��� �Ȥ������ȤǤ��� ����� tun/tap �ǥХ����򰷤���Τ��̾�������� root �����Ǥ��뤿��Ǥ� (���̥桼���� tun/tap ����Ĥ��뤳�Ȥ������Ȼפ��ФǤ��뤫�⤷��ޤ��󤬡� ��Ƥ��ޤ��󡣰���Ū�ˤϡ�����ϥ������ƥ������꤬����Ȥ���Ƥ��ޤ�)�� ���Τ��ᡢVPN ���饤����Ȥȥ����Ф�ξ���� root �桼���� ssh ������������ɬ�פ�����ޤ���

�ޤ�������ڤǤ���ȤϤ��äƤ⡢OpenSSH ��Ȥä� VPN �Ǥ� ���餫���᥯�饤����Ȥȥ����Фδ֤Ǥ����Ĥ��λ����� ���Ƥ���ɬ�פ�����ޤ�:

(�����Ǥ����֥ͥåȥ���ǥХ����Υ��󥿡��ե������ֹ�פȤϡ� tun0 �ʤɤ�̾���˴ޤޤ���������ʬ�Ǥ���)

�ޤ����饤�����¦�� root �Ѥ� RSA ��̩��/�������ڥ���Ĥ���ޤ� (SSH2 �ץ��ȥ����ѤǤ� - �Ť� SSH1 �ץ��ȥ���Ǥ� VPN �ϻȤ��ޤ���):

client# ssh-keygen
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):  �ѥ��ե졼��������
Enter same passphrase again:                 �ѥ��ե졼��������
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.
The key fingerprint is:
7c:7a:b5:5e:13:80:43:f3:0e:66:1f:9b:0a:d0:10:17 root@client

������¦�ˤ��θ����� (id_rsa.pub) �����ꡢ �����Ф� /root/.ssh/authorized_keys �ե��������Ͽ����ʤɤ��ơ� ������̩�����ĥ桼���� root �����������Ĥ��Ƥ��ޤ���

���˥�����¦�� sshd ����ե����� (�̾�� /etc/ssh/sshd_config) �� PermitTunnel ���ܤ�񤭴����ޤ��� ���ι��ܤˤϰʲ��Τ褦���ͤ�����Ǥ��ޤ�:

�����Ǥ� tun �ǥХ�����Ȥä��ȥ�ͥ�󥰤���Ĥ��뤿�ᡢ �ʲ��Τ褦�ˤ��ޤ�:
PermitTunnel point-to-point

����ˡ��դĤ���⡼�Ȥ���� root ���������ػߤ��Ƥ��� (PermitRootLogin no �ˤ��Ƥ���) �Ȥ�����¿���Ȼפ��Τǡ� ������ʬ���ѹ�����ɬ�פ�����ޤ����Ȥꤢ�������ΤȤ�����

PermitRootLogin without-password
�Ȥ��Ƥ����ޤ��礦 (����Ϥ����ޤǥƥ����ѤǤ�����Ǥ�äȰ�����������Ȥ��ޤ�)��

���Τ��ȥ�����¦�� sshd ��Ƶ�ư���������ȿ�Ǥ����Ƥ���������


�ƥ��Ȥ���

�ǽ�ˡ������Ф�ñ��ʺǾ��¤�����ǥƥ��Ȥ򤷤Ƥߤޤ��� ���� tun/tap �ǥХ�����Ȥä��̿�����ˤϡ� �����Υ��󥿡��ե������������������� ifconfig ��¹Ԥ��� IP���ɥ쥹�����ꤹ��ɬ�פ�����ΤǤ�����ssh �Ϥ���ñ�� tun/tap ���������� �Ź沽�ȥ�ͥ���󶡤�������Ǥ����Ĥޤꡢ�ºݤΥ��󥿡��ե������������ �����Υ��ޥ�ɤ�Ǥ����Ƥ���ΤǤ���������ʬ��ư�����뤳�Ȥ�Ǥ��ޤ����� ���꤬ʣ���ˤʤ�Τǡ��Ȥꤢ�����ǽ�Ϥ������ư�Ǥ����ʤ����Ȥˤ��ơ� �ޤ��ȥ�ͥ뤬��Ω�Ǥ��뤫�ɤ���������ƥ��Ȥ��Ƥߤ뤳�Ȥˤ��ޤ���

VPN �򳫻Ϥ���ˤϡ����饤����Ⱦ�ǰʲ��Υ��ޥ�ɤ�¹Ԥ��ޤ�:

client# ssh -v -w0:0 server
Enter passphrase for key '/root/.ssh/id_rsa': (�ѥ��ե졼��������)

-w �ϥȥ�ͥ�󥰤���ꤹ�륪�ץ����ǡ� -w���饤�����¦�Υ��󥿡��ե������ֹ�:������¦�Υ��󥿡��ե������ֹ� �Τ褦�˻��ꤷ�ޤ����ǥե���ȤǤϥȥ�ͥ���ѤΥǥХ����Ȥ��� tun ���Ȥ��ޤ��� �Ĥޤꡢ-w0:0 �ϥ��饤����ȡ������ФȤ�˥��󥿡��ե������ֹ� 0 �� tun �ǥХ����� �Ȥä� VPN ���Ω����Ȥ������Ȥ��̣���Ƥ��ޤ��� -v �ϥǥХå��Ѥν��Ϥ�ɽ�����륪�ץ����Ǥ���

���ޤ������м��Τ褦�ʥ�å����� (Linux �ξ��) ���Фơ��̾�Υ����뤬���Ϥ���ޤ�:

...
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Requesting tun.
debug1: sys_tun_open: tun0 mode 1 fd 7
debug1: channel 1: new [tun]
Last login: Mon Feb 13 10:30:42 2006 from xxx.xxx.xxx.xxx
server# 

���꤬���ä����

�ʲ��Τ褦�ʥ�å��������ФƤ����˽�λ���Ƥ��ޤ����ϡ� ���饤�����¦�Ǥ� tun/tap �ǥХ�������������꤬����ޤ�:

...
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Requesting tun.
debug1: sys_tun_open: failed to open tunnel control interface: No such device
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Connection to xxx.xxx.xxx.xxx closed.
debug1: Transferred: stdin 0, stdout 0, stderr 40 bytes in 0.1 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 672.2
debug1: Exit status 0
debug1: compress outgoing: raw data 347, compressed 211, factor 0.61
debug1: compress incoming: raw data 61, compressed 47, factor 0.77

���顼�θ������ֿ�����ʬ�˽񤫤�Ƥ��ޤ��� �����ϡ������ͥ뤬 tun/tap �ǥХ�����Ȥ���褦�����ꤵ��Ƥ��ʤ����Ȥ򼨤��Ƥ��ޤ��� ������ʬ�� "debug1: sys_tun_open: failed to open tunnel control interface: No such file or directory" ���ä���硢�б�����ǥХ����Ρ��ɤ� /dev�ʲ���¸�ߤ��ʤ����Ȥ򼨤��Ƥ��ޤ���

���äݤ���������¦�����꤬������ϼ��Τ褦�ˤʤ�ޤ�:

...
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Requesting X11 forwarding with authentication spoofing.
debug1: Requesting authentication agent forwarding.
debug1: Requesting tun.
debug1: sys_tun_open: tun0 mode 1 fd 7
debug1: channel 1: new [tun]
debug1: Remote: Failed to open the tunnel device.
channel 1: open failed: administratively prohibited: open failed
debug1: channel 1: free: tun, nchannels 2

����ϥ�����¦�� (���¤��ʤ������뤤�ϥǥХ��������ꤵ��Ƥ��ʤ��ʤɤ���ͳ��) tun/tap �ǥХ��������ѤǤ��ʤ����Ȥ򼨤��Ƥ��ޤ��� ���뤤�ϡ�"debug1: Remote: Server has rejected tunnel device forwarding" �Ƚ��Ϥ��줿���ϡ�������¦�ǥȥ�ͥ�λ��Ѥ����Ĥ���Ƥ��ʤ� (PermitTunnel ���ͤ��������ʤ�) ���Ȥ򼨤��Ƥ��ޤ���

������¦�����꤬��������硢ssh �ϥȥ�ͥ�󥰤ʤ��ǥ������ư���뤫�� ���뤤�ϼ�ưŪ����³���ڤäƤ��ޤ��ޤ��� ���饤�����¦�����꤬��������硢ssh �Ϥ����˽�λ����褦�Ǥ���

���ޤ����ä����

���ơ����ޤ��ȥ�ͥ�󥰤��Ǥ��Ƥ�����ϡ������Фȥ��饤����Ȥ�ξ���� tun �ǥХ��������������Ƥ���Ϥ��Ǥ��� ����� ifconfig tun0 (���뤤�� ifconfig -a) ��¹Ԥ��Ƥߤ�Ф狼��ޤ�:

(Linux ��)
# ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          POINTOPOINT NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

(FreeBSD ��)
# ifconfig tun0
tun0: flags=8011<UP,POINTOPOINT,MULTICAST> mtu 1500
        Opened by PID 24015

�ȥ�ͥ�󥰤Ǥ��Ƥ��ʤ����֤� ifconfig tun0 ��¹Ԥ���ȡ� Linux �Ǥϥ��󥿡��ե����� tun0 ���Τ�Τ�¸�ߤ������顼�Ȥʤꡢ FreeBSD �Ǥ� "Opened by PID XXXX" ����ʬ��ɽ������ޤ��� ��Τ褦��ɽ������Ƥ�����ϥȥ�ͥ�󥰤���Ω���Ƥ��ޤ���

�����������ξ��֤Ǥϥ����Фȥ��饤����Ȥ� tun �ǥХ����֤��̿�ϩ����Ω���줿�����ǡ� �ޤ� IP �ؤ�����ϴ�λ���Ƥ��ޤ����̿���Ԥ�����ˤϥ����Фȥ��饤�����ξ���� tun ���󥿡��ե�������IP ���ɥ쥹�����ꤷ�Ƥ��ɬ�פ�����ޤ��� �����Ǥ��̤�ü����Ȥäơ����饤����Ȥȥ����о��ξ���� tun �ǥХ��������ꤷ�ޤ� (���Ȥ��Ȥ���ϼ�ưŪ�˹Ԥ��褦���ꤷ�ޤ��������ޤ�ξ���Ȥ��ư�Ǥ�äƤߤޤ�)��

tun �ǥХ����� IP �ؤ򥨥ߥ�졼�Ȥ��� (�ĤޤꡢIP �ѥ��åȤ�ľ������������) �Τǡ� Ethernet �Υ��󥿡��ե������Ȥϰ�äơ� ������� IP ���ɥ쥹����ꤷ�Ƥ��ɬ�פ�����ޤ���

(Linux ��)
# ifconfig tun0 ��ʬ��IP���ɥ쥹 pointopoint ����IP���ɥ쥹 (point to point�ǤϤʤ��Τ�����)

(FreeBSD ��)
# ifconfig tun0 ��ʬ��IP���ɥ쥹 ����IP���ɥ쥹

����򥵡��Фȥ��饤����Ȥ�ξ���Ǽ¹Ԥ��ޤ��� ���Ȥ��Х�����¦�β��� IP ���ɥ쥹�� 192.168.3.1�� ���饤�����¦�β��� IP ���ɥ쥹�� 192.168.3.2 �˷�᤿�Ȥ���ȡ� �ʲ��Τ褦�ˤʤ�ޤ�:

(������¦ - Linux �ξ��)
server# ifconfig tun0 192.168.3.1 pointopoint 192.168.3.2
(���饤�����¦ - Linux �ξ��)
client# ifconfig tun0 192.168.3.2 pointopoint 192.168.3.1

���줬���������顢���ޤ� IP ��٥�Ǥ� �̿����Ǥ���褦�ˤʤäƤ���Ϥ��Ǥ��Τǡ� ���ߤ��� ping �����äƳΤ���Ƥߤޤ��礦��

(������¦)
server# ping 192.168.3.2 (�����Ф��饯�饤����Ȥ� ping)
(���饤�����¦)
client# ping 192.168.3.1 (���饤����Ȥ��饵���Ф� ping)

���Ȥ��̾�Υץ饤�١��ȥͥåȥ����Ʊ���褦�����ѤǤ��ޤ��� NFS �����Ѥ���ʤꡢNAT �����ꤹ��ʤ꼫ͳ�ˤ��Ƥ��������� �ʤ���NFS �ǥ��쥯�ȥ��ޥ���Ȥ���Ȥ��ϡ�TCP ���ץ�����Ĥ��뤳�Ȥ� �������ᤷ�ޤ� (®�٤��㤤�ޤ�)��

VPN �����

VPN ���å����ϥ桼�������������Ȥ������Ȥ�³���ޤ��� ��ۤɤΥǥХå��⡼�ɤ� root �Υ����뤫�� exit ����ȡ� ssh �ϥ����뤫��ȴ�������Ȥ�����Ȥ��� VPN �Υ��å�����³���ޤ�:

server# exit
logout
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 2
(������ Control-C ������)
debug1: channel 1: free: tun, nchannels 1
Killed by signal 2.

���ߤΤȤ����� VPN ���å�����λ����ˤ�ü����� Control-C �򲡤����� ssh ���饤����Ȥ� kill����ʳ�����ˡ�Ϥʤ��褦�Ǥ���

tun �Τ����� tap ��Ȥ�

Ʊ�ͤˡ����٤� tun �ǤϤʤ� tap �ǥХ�����Ȥä� Ethernet ��٥�Υȥ�ͥ�󥰤��äƤߤޤ��� �ȥ�ͥ�󥰤Τ����� tun ��Ȥ��� tap ��Ȥ����ϡ� �����Фȥ��饤�����ξ��������˰�¸���Ƥ��ޤ��� �����Фϵ��Ĥ���ȥ�ͥ�󥰤μ���� sshd_config �� PermitTunnel ���ܤǻ��ꤷ�� ���饤����Ȥ��׵᤹��ȥ�ͥ�󥰤μ���� ~/.ssh/config (���뤤�� ssh_config ���� ssh �Υ��ޥ�ɥ饤�󥪥ץ����) �� Tunnel ���ܤǻ��ꤷ�ޤ��� �����ι��ܤȥȥ�ͥ�󥰤μ���Ȥδط��ϡ��ʲ��Τ褦�ˤʤäƤ��ޤ�:

PermitTunnel (������) �� Tunnel (���饤�����) ���� ����
ξ���� yes PPP (tun) ���Ȥ���
�ɤ��餫������ yes (�ޤ��� point-to-point) �ǡ� �⤦������ point-to-point PPP (tun) ���Ȥ���
�ɤ��餫������ yes (�ޤ��� ethernet) �ǡ� �⤦������ ethernet Ethernet (tap) ���Ȥ���
�ɤ��餫������ point-to-point �ǡ� �⤦������ ethernet �ȥ�ͥ�󥰤ϵ��ݤ����
�ɤ��餫������ no �ȥ�ͥ�󥰤ϵ��ݤ����

�����ι��ܤ����������ꤹ��ȡ�tun �ΤȤ���Ʊ���褦�˰ʲ��Υ��ޥ�ɤ� VPN �����ϤǤ��ޤ�:

client# ssh -v -w0:0 server

���뤤�ϡ�����ե������񤭤����뤫���ˡ� ssh �Υ��ޥ�ɥ饤�󥪥ץ���󤫤�ľ�ܻ��ꤹ�뤳�Ȥ�Ǥ��ޤ���

client# ssh -v -oTunnel=ethernet -w0:0 server

������ -w ���ץ�����Ϳ���Ƥ��� ���� 0 �Ϻ��٤� tun �ǤϤʤ� tap �Υ��󥿡��ե������ֹ�Ǥ���

̵�������Ф˥�������Ǥ����顢ifconfig tap0 ���ƤߤƤ�������:

(Linux ��)
# ifconfig tap0
tap0      Link encap:Ethernet  HWaddr 00:FF:4A:21:8F:3D
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

(FreeBSD ��)
# ifconfig tap0
tap0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether 00:bd:73:36:60:c8
        Opened by PID 93688

�ǥХ������Ǥ��Ƥ���Τ��ǧ�����顢IP ���ɥ쥹�����ꤷ�Ƥ��ޤ��� tap �ǥХ����ξ��ϥ��ߥ�졼�Ȥ���Τ� Ethernet �ʤΤǡ� �����Ǥ��̾�Υͥåȥ�������ɤ˥��ɥ쥹����ꤹ��Τ�Ʊ����ˡ�� OK �Ǥ���

(������¦)
server# ifconfig tap0 192.168.3.1 netmask 255.255.255.0
(���饤�����¦)
client# ifconfig tap0 192.168.3.2 netmask 255.255.255.0

�ºݤ˱��Ѥ���

���ơ��ºݤ�����Ū�˻Ȥ��Ȥʤ�ȡ��������������Фȥ��饤����Ȥ�ξ���� ��� ifconfig ��¹Ԥ��Ƥ���櫓�ˤϤ����ޤ��� �ޤ���⡼�Ȥ���� root �Υ�������Ѥ�ػߤ������ͤ⤤��Ǥ��礦�� ���饤����Ȥȥ����Ф�����򤪤��ʤ����Ȥˤ�äơ������κ�Ȥ�ܼۤ�ư�����뤳�Ȥ��Ǥ��ޤ� (�Ȥ��äƤ⡢�ޤ������ǤϤ���ޤ��󡣸��ߤμ����Ǥϡ� IP ���ɥ쥹�ȥͥåȥ�����󥿡��ե������ֹ�ϡ� �����Фȥ��饤����Ȥ�ξ��������äƼ����Ƥ����ͤФʤ餺�� 2��ʾ�Υ��饤����Ȥ�Ʊ���� VPN ��Ȥ����Ͼ������դ�ɬ�פˤʤ�ޤ���)

���饤�����¦�� VPN �Ѥ� /root/.ssh/config ���

�ǽ�ˡ����饤�����¦�������ư�����Ƥߤޤ��礦�� root �Υۡ���ǥ��쥯�ȥ�ˡ��ʲ��Τ褦������ե�������֤��ޤ�:

(Linux ��)
client# cat /root/.ssh/config
Host server-vpn
        Hostname                server.example.com
        Port                    xxx
        User                    root
        IdentityFile            /root/.ssh/id_rsa
        Tunnel                  point-to-point
        TunnelDevice            0:0
        PermitLocalCommand      yes
        LocalCommand            ( sleep 3; ifconfig tun0 192.168.3.2 pointopoint 192.168.3.1 ) &

�ǽ�� 4�Ĥ�������� (Hostname, Port, User, IdentityFile) �ϡ� ɸ��Ū�ʤ�ΤǤ��������ϥ����ФΥۥ���̾���ݡ����ֹ� (��ȯ���Ƥ��� ssh �ؤΥ����å��Τ��ᡢ���ߤǤ� sshd ��ǥե���Ȱʳ��� �ݡ��Ȥ�ư�����Ƥ���ͤ�¿���Ǥ��礦)���������󤹤�桼��̾����������̩���ե������ ���ꤷ�Ƥ��ޤ������� 4�Ĥ�������� (Tunnel, TunnelDevice, PermitLocalCommand, LocalCommand) ���� 4.3 �� VPN ����Ѥ��뤿��˿������ɲä��줿���ץ����Ǥ�:

Tunnel �ˤĤ��ƤϤ��Ǥ��������ޤ����� TunnelDevice �ϡ�����Ū�˥��ޥ�ɥ饤��� -w ���ץ����� ��äƤ������Ȥ�Ʊ���Ǥ����㤦�Τ� PermitLocalCommand �� LocalCommand �ǡ� ���� 2�Ĥ���ꤹ��ȥ����Ф�ǧ�ڤ������������Ȥǡ���������Υ��饤����Ⱦ�� ��ưŪ������Υ��ޥ�ɤ�¹Ԥ����뤳�Ȥ��Ǥ��ޤ��������Ǥϡ����ε�ǽ��Ȥä� ���饤�����¦�� ifconfig ��¹Ԥ����Ƥ��ޤ���

���ơ������Ǥ� LocalCommand ���������ʷ��ˤʤäƤ��ޤ����� ����ϸ����� (4.3p2) �Ǥ� ssh �Υ��ۤʻ��ͤΤ����Ǥ��������񤤤Ƥ�������� ssh �ϡ� LocalCommand �μ¹Ԥ���λ�������Ȥ� tun/tap �ǥХ����򥪡��ץ󤹤��ΤǤ��� ������ Linux �Ǥ� tun/tap �ǥХ������Ȥ��Ƥ��ʤ� (�ɤΥץ������� open ���Ƥ��ʤ�) ���֤Ǥϡ� ifconfig �����ꤹ�뤳�ȤϤǤ��ޤ��� �������ä� LocalCommand ��¹Ԥ�������Ǥϡ��ޤ� tun/tap �ϳ�����Ƥ��餺�� �ʲ��Τ褦�ʥ��顼���ФƤ��ޤ��ޤ�:

SIOCSIFDSTADDR: No such device
tun0: unknown interface: No such device

�����襤��LocalCommand �ϻ��ꤵ�줿���ޥ��ʸ����򤽤Τޤޥ�������Ϥ��Τ� (�Ĥޤꤳ��� sh -c "( sleep 3; ifconfig tun0 192.168.3.2 pointopoint 192.168.3.1 ) &" ��Ʊ���Ǥ�)�� ���ä��� LocalCommand �Υ������λ�����Ƥ��顢 �Хå����饦��ɤ� ifconfig ��¹Ԥ����뤳�Ȥ��Ǥ��ޤ��� �����Ǻǽ�� sleep 3 ����ꤷ�Ƥ���Τϡ�LocalCommand ���¹Ԥ���Ƥ��� 3�ø�ˤϤ����餯 tun0 ���󥿡��ե����������ѤǤ�����֤ˤʤäƤ���Ǥ������ȴ��Ԥ��Ƥ��ޤ��� ssh �� LocalCommand �ץ������ν�λ���Ԥ��ޤ��Τǡ� ���ι����Τ� ( ) �Ǥ����äƥХå����饦��ɤǼ¹Ԥ����Ƥ��ޤ��� ����ǰ����ǧ�ڤ���ȼ�ưŪ�� ifconfig ���¹Ԥ����褦�ˤϤʤ�ΤǤ����� �դ��ƿ�Ū�ʴ������ݤ�ޤ��� (��������������ѥå��� openssh-unix-dev �����ä��ΤǤ��������ޤ�Ȥ�̵�뤵��Ƥޤ�)

���äݤ� FreeBSD �ξ��ϡ�tun �򳫤����Ǥ� ifconfig ���Ȥ���Τǡ� �Ȥ��� sleep �ʤɤε���Ȥ�ʤ��Ƥ⡢�դĤ���

LocalCommand  ifconfig tun0 192.168.3.2 192.168.3.1
�Ƚ񤤤Ƥ������������ޤ���

�ʤ��������Ǥ�äƤ��� ifconfig ��ľ�ܼ¹Ԥ�����ˡ��¤Ϥ��ޤꤪ������Ǥ��ޤ��� RedHat �Ϥ� Linux �Ǥ���� /etc/sysconfig/network-scripts/ifcfg-tun0 �ʤɤ� ����ե�������äƤ�����ľ�� ifconfig ��¹Ԥ��뤫���� /sbin/ifup tun0 �Ȥ���Τ������ʤ�����Ǥ��礦��

���ޤ������С��ʲ��Τ褦�����Ϥ�������� (���饤�����¦��) VPN �Ͻ�����λ�ˤʤ�Ϥ��Ǥ�:

client# ssh server-vpn
Enter passphrase for key '/root/.ssh/id_rsa': (�ѥ��ե졼��������)
Last login: Mon Feb 13 10:30:42 2006 from xxx.xxx.xxx.xxx
server# 

������¦�� authorized_keys �ե�������ѹ�����

���Ĥ��ϥ����Ф�����Ǥ�������ޤǤϥƥ��ȤΤ��ᡢ sshd����ե������ PermitRootLogin �� without-password ����ꤷ�ƥ����Ф� root ��ľ�ܥ������󤹤뤳�Ȥ� �����Ƥ��ޤ����������� root �Υ����뤬ɬ�פʤ��Ȥ��˥������¹Ԥ�����Τ� ��������Ǥ��ޤ��󡣤����ǡ��ܳ�Ū�˱��Ѥ�����Ϥ������¤�⤦���ʳ����Ĥ����ơ�

PermitRootLogin forced-commands-only
�ˤ��ޤ�������ϡ� �֥������󤹤�ȶ���Ū������Υ��ޥ�ɤ��¹Ԥ������ˤΤ� root �Υ����������Ĥ���פȤ�����̣�Ǥ��� ������󡢤��ξ���ǧ�ڤ�ɬ�פǤ��� ���ޤ��Τ��Ƥ��ޤ��󤬡��桼���� ~/.ssh/authorized_keys�ե�����Ǥϡ� �����Ȥˡ֤��θ��ǥ������󤷤��Ȥ��˶���Ū�˼¹Ԥ��륳�ޥ�ɡפ���ꤹ�뤳�Ȥ��Ǥ��ޤ��� �������ꤹ��Ȥ��Υ��ޥ�ɤΤߤ��¹Ԥ��졢����Ū�ʥ�����ϼ¹Ԥ���ޤ��� (�ºݤˤϡ����Υ��ޥ��ʸ���� sh -c ���Ϥ���ޤ�)�� ����Ū�ˤϡ����Υե�����γƹԤ� (RSA �ޤ��� DSA ��) ���������󤬵�Ͽ����Ƥ���ΤǤ�����
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2ZRyh0R...
�ȤʤäƤ���Ȥ����򡢥ƥ����ȥ��ǥ����ʤɤ�
command="�����¹Ԥ����륳�ޥ��" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2ZRyh0R...
�Τ褦���ѹ����Ƥ��ޤ��� =������˥��ڡ���������ƤϤ����ޤ��󡣤ޤ���1�Ԥ�ʬ�Ǥ��ʤ��褦���դ��Ƥ��������� ��ǻ��ꤷ�� PermitRootLogin forced-commands-only �ϡ� ���Τ褦�ʥ��ޥ�ɤ����ꤵ��Ƥ���������ǤΤ� root �����������Ĥ���Ȥ�����ΤǤ��� ���ε�ǽ�ϡ��̾� root ���¤�ɬ�פ��귿��� (�Хå����åפʤ�) �˻Ȥ����ΤǤ����� ���Υ��ޥ�ɤ����ꤵ��Ƥ��������Ū�ʥ�����ϼ¹Ԥ��줺�����ޥ�ɤ���λ����ȼ�ưŪ�˥��������Ȥ��뤿�ᡢ ����Ū�ʥ��������������Ǥ��� �ޤ������󥿡��ե������ֹ�������� IP ���ɥ쥹����ޤäƤ�����Ǥ���С� �����Ȥä� VPN ������⼫ưŪ�˹Ԥ����Ȥ��Ǥ��ޤ�:

(Linux ��)
command="ifconfig tun0 192.168.3.1 pointopoint 192.168.3.2" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2ZRyh0R...

(FreeBSD ��)
command="ifconfig tun0 192.168.3.1 192.168.3.2" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2ZRyh0R...

����Ū�ˤϡ��������ޥ�ɼ¹Ԥϻ��ꤵ�줿���ޥ�ɤ���λ����ȼ�ưŪ�˥��������Ȥ��Ƥ��ޤ��ޤ����� �ȥ�ͥ�󥰤�ȤäƤ�����ϡ����ޥ�ɤ���λ�������Ȥ⥵���Фϼ¹Ԥ�³���ޤ��� �ʤ���sshd �ξ��Ϥ��Υ��ޥ�ɤ�¹Ԥ������� tun/tap �ǥХ����򳫤��Τǡ� ���饤�����¦�ǾҲ𤷤��褦�� sleep �Υȥ�å���ɬ�פ���ޤ���

����ˡ������ˤϥ�����¦��������Ƥ� tun �ޤ��� tap �Υ��󥿡��ե������ֹ�� ����Ū�˻��ꤹ�뤳�Ȥ��Ǥ��ޤ�:

(Linux ��)
tunnel="0",command="ifconfig tun0 192.168.3.1 pointopoint 192.168.3.2" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2ZRyh0R...

(FreeBSD ��)
tunnel="0",command="ifconfig tun0 192.168.3.1 192.168.3.2" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2ZRyh0R...

(����: ����ޤ�����˥��ڡ��������äƤϤ����ޤ���)

��������ȡ����饤����Ȥ��餳�θ���Ȥäƥ������󤷤��Ȥ���ɬ�� ������¦�� tun0 �ǥХ����������� ifconfig ����ưŪ�˼¹Ԥ���� (�����⡢����Ū������ϼ¹Ԥ���ʤ�) ���Ȥˤʤ�ޤ��� �ʲ��Τ褦�����Ϥ��Ʋ���ФƤ��ʤ��ä��������Ǥ�:

client# ssh server-vpn
Enter passphrase for key '/root/.ssh/id_rsa': (�ѥ��ե졼��������)

ʣ���Υ��饤����Ȥ���Ʊ��Υ����Ф���³����

����ޤǤϥ��饤����Ȥȥ����Ф� 1��1 �ξ��������ꤷ�Ƥ��ޤ������� ʣ���Υ��饤����Ȥ� VPN ��Ȥ碌�������ϰʲ��Τ褦�ˤ��ޤ��� ���饤����� A �� B ��Ʊ��Υ����Ф���³����Ȳ��ꤷ�ơ� ���줾��ʲ��Τ褦������ե������������ޤ�:

���饤����� A �� /root/.ssh/config:

client-a# cat /root/.ssh/config
Host server-vpn
        Hostname                server.example.com
        Port                    xxx
        User                    root
        IdentityFile            /root/.ssh/id_rsa
        Tunnel                  point-to-point
        TunnelDevice            0
        PermitLocalCommand      yes
        LocalCommand            ( sleep 3; ifconfig tun0 192.168.3.2 pointopoint 192.168.3.1 ) &

���饤����� B �� /root/.ssh/config:

client-b# cat /root/.ssh/config
Host server-vpn
        Hostname                server.example.com
        Port                    xxx
        User                    root
        IdentityFile            /root/.ssh/id_rsa
        Tunnel                  point-to-point
        TunnelDevice            0
        PermitLocalCommand      yes
        LocalCommand            ( sleep 3; ifconfig tun0 192.168.3.3 pointopoint 192.168.3.1 ) &

���� 2�ĤΥե�����ϰ��ֺǸ�� LocalCommand �ʳ��Ϥ��٤ƶ��̤ι��ܤǤ��� ������������Ȱ�ä� TunnelDevice �ˤ� 0:0 �ǤϤʤ� 0 �Ȼ��ꤷ�Ƥ����ޤ������ޤǤϥ��饤����Ȥ�������¦�� tun ���󥿡��ե������ֹ�� ���ꤷ�Ƥ��ޤ�������:0 ���ά����ȥ�������ʥ��󥿡��ե������ֹ���������Ǥ��� ������¦���ֹ�γ�����Ƥϥ�����¦��Ǥ���뤳�Ȥ��Ǥ��ޤ� (���η����ϥ��ޥ�ɥ饤��� -w���ץ����Ǥ�Ȥ��ޤ�)�� ���������ξ��ϡ�ɬ��������¦�� authorized_keys �ե������ tunnel ���ץ�����Ȥäƥ�����¦�Υ��󥿡��ե������ֹ����Ƥ���ɬ�פ�����ޤ��� ����ʤ���ͽ�۳��Υ��󥿡��ե�������������Ƥ��뤳�Ȥ����뤿��Ǥ� (���Ȥ��� FreeBSD �Ǥ� tun100 �ʤɤ�������Ƥ���)��

�ޤ������饤����� A �ȥ��饤����� B �Ϥ��줾���̡�����̩������������Ȥ����Ȥ� ���դ��Ƥ����������������뤳�Ȥǥ����Ф���꤬�ȤäƤ������ˤ�äƥ��饤����Ȥ��̤��� ���󥿡��ե������ֹ�� IP ���ɥ쥹��դ�ʬ���뤳�Ȥ��Ǥ��ޤ�:

server# cat /root/.ssh/authorized_keys
tunnel="0",command="ifconfig tun0 192.168.3.1 pointopoint 192.168.3.2" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApTD2Z... (���饤����� A �θ�����)
tunnel="1",command="ifconfig tun0 192.168.3.1 pointopoint 192.168.3.3" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyDXuQ... (���饤����� B �θ�����)

������ ���饤�����¦�⥵����¦�⥤�󥿡��ե������ֹ�� IP ���ɥ쥹��ޤä������ꤻ���� ���ξ�� DHCP �Τ褦�ʤ��Ȥ��Ǥ����餤���ΤǤ��������Τ���ˤ� ������¦�� (command �Ƕ����¹Ԥ����) �ץ������� ������Ƥ�줿���󥿡��ե������ֹ���Τ�ɬ�פ�����ޤ��� �����������ߤΤȤ��������Ф��ɤ��ֹ�Υ��󥿡��ե������������Ƥ��Τ� ���������Τ뤹�٤Ϥ���ޤ��� (�Ķ��ѿ��ˤ⸽��ޤ���)��


��ǽ�Ȱ������ˤĤ���

(���ι�ޤ�������)

Linux-2.4.31 �����ͥ�Υ������ĥ꡼ (Ÿ���������֤��� 176MBytes) ��ž���������:

��³ NFS ľ�� VPN+NFS ssh+rsync
Ethernet 100Mbps s s 65s
�����֥��ǥ� (���� 10Mbps����) 1594s 1371s 83s

�ʤ��������֥��ǥ��Ȥä��ݤ� NFS �� tcp ���ץ�����Ĥ��Ƥ��ޤ��� �ޤ������饤�����¦�� ssh �ˤ� (NFS, rsync ���Ȥ��) �ʲ��Τ褦�ʥ��ץ�����Ϳ���ޤ���:

Ciphers         arcfour   (�Ź沽���르�ꥺ��˹�®�� arcfour ����ꤹ��)
Compression     yes       (���̤���Ĥ���)
KeepAlive       yes       (������֤��Ȥ� Keep-alive ��å�����������)

NFS+VPN �ξ�硢 cp -a �����̤Υե������ž�����Ƥ���ȡ������ VPN ��Υͥåȥ�����ޤä���ȿ�����ʤ��ʤ� (ping ���̤�ʤ�) �Ȥ��������������Ӥ��ӵ�����ޤ��������줬���ΤˤɤΤ褦�ʾ��� ������Τ��Ϥ��ޤΤȤ��������Ǥ���


Last Modified: Tue Mar 14 13:09:29 EST 2006 (03/15, 03:09 JST)
Yusuke Shinyama