Article ID No. 14306635110 (Delete) | New Date & Time 2013 2014 2015 2016 2017 /1 2 3 4 5 6 7 8 9 10 11 12 /1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 :0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 :0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 Category Title Content 久々にインフラネタ。モバイルの Mac と別拠点の LAN を Bonjour で接続したかったので、SSH を使った L2 トンネルを作った。 (背景: Bonjour プロトコルはルータを超えないように設計されており、IPIP や L2TP/IPsec VPN (PPP) などの L3 トンネルでは疎通できない。) 接続元は、Mac (<a href="http://tuntaposx.sourceforge.net">tuntaposx</a> をインストールしておく)。 接続先は、別拠点 LAN 上に存在する SSH サーバ (RHEL 6)。 手順は以下の通り。 <ol> <li>接続先サーバの sshd_config に PermitTunnel ethernet (or yes) を設定した状態で OpenSSH サーバを起動する。</li> <li>接続先サーバに仮想ブリッジを作成し、そのブリッジに Bonjour で共有したいネットワークの NIC を追加しておく。</li> <li>接続先サーバに、ユーザ権限を付与した仮想 Ethernet NIC (tap デバイス) を作成し、その tap デバイスを仮想ブリッジに追加する。 <pre> # tunctl -u kenichi -p Set 'tap0' persistent and owned by uid 1000 # brctl addif br0 tap0 # ifconfig tap0 up </pre> </li> <li>クライアント(Mac)側で、SSH 接続を行う。-w は使用するローカル/リモートの tap デバイス番号 (または any) を指定する。これでトンネルが確立する。 <pre> # sudo ssh -o Tunnel=ethernet -w 0:0 kenichi@ssh.example.com </pre> </li> <li>クライアント(Mac)側で、tap デバイスに IP アドレスを振るか、DHCP を有効にする。 <pre> # sudo ipconfig set tap0 DHCP </pre> </li> </ol> これで、接続先サブネット上の iTunes が Bonjour で見えるようになるので、ホームシェアリングが使えます。 iTunes Match を使わずとも、WAN 経由で iTunes ライブラリを共有できるので便利。 (追記: 2015/05/24) RHEL 7 であれば、tunctl の代わりに ip tuntap add mode tap user kenichi、ifconfig の代わりに ip link set tap0 up。 (追記: 2016/01/01) ssh コマンドの引数順序を修正。 (-w 0:0 -o Tunnel=ethernet → -o Tunnel=ethernet -w 0:0) El Capitan では修正後の順序でないと <code>channel 0: open failed: administratively prohibited: open failed</code> というエラーが表示され正しく動作しないかった。 Password