開始行:
#norelated
*Solaris で SoftEther もどきを動かそう/其の1
*目次 [#k3142849]
#contents
*ご注意 [#v74b5e0c]
ここで紹介しているプログラムは、カーネルモジュールを含ん...
*お知らせ [#l11e7bd6]
**(2005-02-19) [#n8e1fc52]
以前、仮想 NIC ドライバのドライバ名を "sfe" としていま...
*概要とイメージ [#xa6f22d3]
今回はレイヤー2ベースの VPN アプリケーション作りに挑戦し...
SoftEther で使われているプロトコルは今のところ公開されて...
ここで紹介するプログラムでは基本的に SoftEther と同一の構...
|ste|デバイスドライバ|仮想 NIC デバイスドライバ。物理 NIC...
|sted|ユーザモードデーモン|仮想 NIC デーモン。仮想 NIC ド...
|stehub|ユーザモードデーモン|仮想ハブ。TCP ポート 80 番で...
各々のプログラムの役割や実装方法についても SoftEther の考...
-カーネルモードで動作する仮想 NIC のデバイスドライバを動...
-仮想 NIC ドライバは、 アプリケーションからは実在の NIC ...
-仮想ハブと仮想 NIC との通信はユーザモードのデーモンで行...
- 仮想ハブと仮想 NIC デーモンとの通信には TCP を使う。
#ref(http://www.whiteboard.ne.jp/~admin2/pict/ste_stream....
※ この図は分かりやすくするために簡略化して記述しています。
逆に SoftEther にあってこのプログラムに無いものは・・
-仮想ハブと仮想 NIC 間の通信の暗号化機能
-仮想ハブへの接続時のユーザ認証機能
-仮想ハブでの接続機能
-仮想ハブでのパケットフィルタリング機能
-プロキシー, SOCKS, SSH 経由での接続
-仮想ハブの VLAN 機能
-ロギング機能
-・・・などなどなど・・・
無いものだらけです。(泣)仮想 NIC ドライバづくりで体力使...
*ソースファイルとダウンロード [#idaa191f]
>ソースファイル: [[vpn-ste-0.1.tar.gz>http://github.com/d...
|>|CENTER:tar ファイルに含まれるファイル|h
|Makefile|ste ドライバ、sted、stehub コマンド用の Makefile|
|ste.c|仮想 NIC デバイスドライバ|
|ste.conf|ドライバ設定ファイル。(driver.conf(4))|
|ste.h |ヘッダーファイル|
|sted.c|仮想 NIC デーモン|
|stehub.c |仮想 HUB|
本プログラムは Sparc マシンの 64bit Solaris 9、Solaris 10...
*解説 [#c31865f4]
** ste:仮想 NIC ドライバ [#g9a85216]
今回のプログラムのなかで一番苦労したのがこれです。実装法...
まず、Solaris 上で動作する NIC のデバイスドライバを作ろう...
-GLD(Generic LAN Driver)フレームワークを利用し、GLD ベー...
-ゼロから全て書く。
GLD とは Solaris が提供しているネットワークインターフェー...
今回作ろうとしているのは仮想 NIC のドライバで、もともとハ...
+open(9E)、close(9E) のルーチンを gld(7D)が提供しているた...
+制御用のメッセージなど、特殊なメッセージを送受することが...
つまりは、「そんな変な使い方すんな!」というところでしょ...
+DLPI Style 1 データリンクサービスプロバイダ
+DLPI Style 2 データリンクサービスプロバイダ
簡単に言うと、「/dev/hme0」の様に「0」というインスタンス...
DLS プロバイダとして提供しなければならないサービスはたく...
|プリミティブ|内容|h
|DL_INFO_REQ |情報要求|
|DL_BIND_REQ |SAP のバインド|
|DL_UNBIND_REQ |SAP のバインド解除|
|DL_ATTACH_REQ |PPA をアッタチ|
|DL_DETACH_REQ |PPA をデタッチ|
|DL_PROMISCON_REQ |無差別受信モードを有効にする|
|DL_PHYS_ADDR_REQ |物理アドレスの取得要求|
|DL_SET_PHYS_ADDR_REQ |物理アドレスのセット要求|
|DL_UNITDATA_REQ |データグラム送信要求|
|DL_UNITDAT_IND |データの到着通知|
DLPI、プリミティブについてはSolaris DLPI プログラミングも...
[[其の2>Solaris で SoftEther もどきを動かそう/其の2]]のコ...
|プリミティブ |内容|h
|DL_ENABMULTI_REQ |マルチキャストアドレスを有効にする|
**sted: 仮想 NIC デーモン [#p6252013]
カーネルモードで動作する仮想 NIC ドライバと仮想ハブとの間...
以下、プログラム内での実際の動きをご説明します。仮想 NIC ...
仮想 NIC デーモンは getmsg(2) システムコールを利用して、...
typedef struct stehead
{
int len; /* パディング後のデータサイズ */
int orglen; /* パディングする前のサイズ。 */
} stehead_t;
逆に、仮想ハブからデータを受信した場合には上記の stehead ...
※ ちなみに「デーモン」と名前がついていますが、端末の切り...
**stehub: 仮想 ハブ [#yce9eebe]
仮想ハブは、実際のハブのように、あるポート(仮想 NIC デー...
中身としては、ほとんど特筆すべきところはなく、TCP ポート ...
struct conn_stat {
struct conn_stat *next; /* 次の conn_stat 構造体のポ...
int fd; /* FD */
struct in_addr addr; /* 接続してきている仮想 NIC ...
};
お粗末なコードなので、パケットの受け渡しがかなり非効率に...
*インストール [#c0e96d1f]
**コンパイル&インストール [#n7c37c00]
コンパイルには gcc を使います。make をそのまま実行した場...
# make
gcc ste.c -D_KERNEL -c -m64
/usr/ucb/ld -dn -r ste.o -o ste
gcc sted.c -o sted -lsocket -lnsl
gcc stehub.c -o stehub -lsocket -lnsl
#
ste ドライバのインストール、およびカーネルへのロード、ste...
# make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
#
仮想 NIC のデバイス名は ste になります。
# ls -l /dev/ste
lrwxrwxrwx 1 root other 29 10月 28日 23:3...
# ls -l /devices/pseudo/clone@0:ste
crw------- 1 root sys 11,215 11月 13日 23:5...
#
sted 、stehub デーモンについてはコピーは行われません。適...
**アンインストール [#kd5f4821]
ドライバのアンインストールは make uninstall で行います。
# make uninstall
/usr/sbin/rem_drv ste
/bin/rm /kernel/drv/sparcv9/ste
/bin/rm /kernel/drv/ste.conf
#
同時に ste ドライバのアンロード、ste デバイスノードの削除...
# make uninstall
/usr/sbin/rem_drv ste
デバイスは使用中です
Cannot unload module: ste
Will be unloaded upon reboot.
/bin/rm /kernel/drv/sparcv9/ste
/bin/rm /kernel/drv/ste.conf
#
*使い方 [#w4edbe6a]
仮想 NIC ドライバ、仮想 NIC デーモン、仮想ハブデーモンの...
**仮想 NIC ドライバ [#m0b86192]
仮想 NIC のデバイス名は ste で、/dev/ste からアクセスでき...
ただし、MAC アドレスはデフォルト値が振られてしまいますの...
# ifconfig ste0 plumb
# ifconfig ste0 10.0.0.55 up
# ifconfig ste0 ether 8:0:20:0:0:55
# ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.73.55 netmask ffffff00 broadcast 172....
ether 8:0:20:c6:69:c7
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 10.0.0.55 netmask ff000000 broadcast 10.255....
ether 8:0:20:0:0:55
# snoop -d ste0
Using device /dev/ste (promiscuous mode)
10.0.0.90 -> (broadcast) ARP C Who is 10.0.0.55, 10.0...
10.0.0.55 -> 10.0.0.90 ARP R 10.0.0.55, 10.0.0.55 i...
10.0.0.90 -> 10.0.0.55 ICMP Echo request (ID: 543 S...
10.0.0.55 -> 10.0.0.90 ICMP Echo reply (ID: 543 Seq...
#
ste は実デバイスが存在しない仮想デバイスなので、/kernel/d...
デフォルトではインスタンス 0(=ste0)だけが有効なインスタ...
ste.conf ファイルの中身
name="ste" parent="pseudo" instance=0;
上記の instance=0 の「0」が仮想デバイスのインスタンスにな...
以下のようにインスタンス 1、インスタンス 2、という行を追...
name="ste" parent="pseudo" instance=1;
name="ste" parent="pseudo" instance=2;
**仮想ハブ(プログラム名 stehub) [#we001c22]
特に起動オプション等はありませんのでそのまま実行してくだ...
# ./stehub &
[1] 312
#
**仮想 NIC デーモン(プログラム名 sted) [#j59a214a]
起動時に ste デバイスのインスタンス番号と接続する仮想ハブ...
Usage: ./sted [ -i instance] [-h hostname]
# ./sted -i 0 -h hub.example.com &
[1] 452
connected with HUB
#
*設定例 [#a1619d7d]
**Host to Host [#of96f376]
それぞれ別々の物理ネットワークに繋がった2つのホストを、...
以下の例では分かりやすくするために、仮想ハブと仮想 NIC デ...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
--ホストA ... 仮想ハブデーモンが動作するホスト。ホストB、...
--ホストB ... 仮想 NIC ドライバがインストールされており、...
--ホストC ... 仮想 NIC ドライバがインストールされており、...
***ホストAの設定 [#z64615c9]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動
hostA # ./stehub &
[1] 1125
hostA #
***ホストBの設定 [#v41df981]
+仮想 NIC ドライバーをインストール。
hostB # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostB #
+仮想 NIC デーモン sted をシステムにコピー。
hostB # cp sted /usr/local/bin
hostB #
+仮想 NIC ste0 を設定
hostB # ifconfig ste0 plumb
hostB # ifconfig ste0 192.168.0.1 up
hostB # ifconfig ste0 ether 8:0:20:0:0:1
hostB # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.73.55 netmask ffffff00 broadcast 172....
ether 8:0:20:c6:69:c7
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 192.168.0.1 netmask ffffff00 broadcast 192.1...
ether 8:0:20:0:0:1
hostB #
+仮想 NIC デーモン sted を起動
hostB # /usr/local/bin/sted -h hostA &
[1] 534
connected with HUB
hostB #
***ホストCの設定 [#hb6bdd60]
+仮想 NIC ドライバーをインストール。
hostC # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostC #
+仮想 NIC デーモン sted をシステムにコピー。
hostC # cp sted /usr/local/bin
hostC #
+仮想 NIC ste0 を設定
hostC # ifconfig ste0 plumb
hostC # ifconfig ste0 192.168.0.2 up
hostC # ifconfig ste0 ether 8:0:20:0:0:2
hostC # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.80.33 netmask ffffff00 broadcast 172....
ether 8:0:20:d3:da:8a
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 192.168.0.2 netmask ffffff00 broadcast 192.1...
ether 8:0:20:0:0:2
hostC #
+仮想 NIC デーモン sted を起動
hostC # /usr/local/bin/sted -h hostA &
[1] 1022
connected with HUB
hostC #
**Host to LAN [#x07392ec]
遠隔地にあるホストをローカルの LAN に参加させるための設定...
ただし、brdg モジュールはもともとこのような使い方を想定し...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
--ホストA ... 仮想ハブデーモンが動作するホスト。ホストB、...
--ホストB ... 仮想 NIC ドライバがインストールされており、...
--ホストC ... 仮想 NIC ドライバがインストールされており、...
--ホストD ... ホストC と同一ネットワークにいる任意ホスト...
***ホストAの設定 [#kc674255]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動
hostA # ./stehub &
[1] 1125
hostA #
***ホストBの設定 [#o748217e]
+仮想 NIC ドライバーをインストール。
hostB # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostB #
+仮想 NIC デーモン sted をシステムにコピー。
hostB # cp sted /usr/local/bin
hostB #
+仮想 NIC ste0 を設定(ホストC、ホストD の実ネットワーク...
hostB # ifconfig ste0 plumb
hostB # ifconfig ste0 172.29.80.55 netmask 255.255.255.0...
hostB # ifconfig ste0 ether 8:0:20:0:0:1
hostB # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.73.55 netmask ffffff00 broadcast 172....
ether 8:0:20:c6:69:c7
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 172.29.80.55 netmask ffffff00 broadcast 172....
ether 8:0:20:0:0:1
hostB #
+仮想 NIC デーモン sted を起動
hostB # /usr/local/bin/sted -h hostA &
[1] 534
connected with HUB
hostB #
***ホストCの設定 [#v9f89668]
+仮想 NIC ドライバーをインストール。
hostC # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostC #
+仮想 NIC デーモン sted をシステムにコピー。
hostC # cp sted /usr/local/bin
hostC #
+brdg ブリッジモジュールをインストール。(詳しくは「[[Sol...
hostC # make install
/bin/cp brdg /kernel/strmod/sparcv9/brdg
/usr/sbin/modload brdg
hostC #
+仮想 NIC ste0 と実 NIC hme0 をブリッジ接続する。
hostC # ./brdgadm -a hme0
hme0 successfully added. (muxid=10)
hostC # ./brdgadm -a ste0
ste0 successfully added. (muxid=11)
このとき、ifconfig では以下のように見える。(ste0 は見え...
hostC # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.80.33 netmask ffffff00 broadcast 172....
ether 8:0:20:d3:da:8a
hostC #
+仮想 NIC デーモン sted を起動
hostC # /usr/local/bin/sted -h hostA &
[1] 1022
connected with HUB
hostC #
*今後の課題 [#oc42482c]
+パフォーマンスの向上!!
現在、仮想 NIC での通信では、以下のように物理ネットワーク...
--仮想ハブ、仮想 NIC 間が 100MFDX で接続している場合・・...
--仮想ハブ、仮想 NIC 間が 10MHDX で接続している場合・・・...
--仮想ハブとインターネット経由(下り 1.2Mbps、上り 512Kbp...
もちろん、仮想 HUB、仮想 NIC が動作しているホスト自身のス...
+SoftEther の仮想ハブとの接続
~自前でプロトコルを調べるのは難しそうなので、公開されたら...
+プロキシー経由での仮想ハブへの接続。
~これができないと、ほとんどの環境でメリットないですよね?
終了行:
#norelated
*Solaris で SoftEther もどきを動かそう/其の1
*目次 [#k3142849]
#contents
*ご注意 [#v74b5e0c]
ここで紹介しているプログラムは、カーネルモジュールを含ん...
*お知らせ [#l11e7bd6]
**(2005-02-19) [#n8e1fc52]
以前、仮想 NIC ドライバのドライバ名を "sfe" としていま...
*概要とイメージ [#xa6f22d3]
今回はレイヤー2ベースの VPN アプリケーション作りに挑戦し...
SoftEther で使われているプロトコルは今のところ公開されて...
ここで紹介するプログラムでは基本的に SoftEther と同一の構...
|ste|デバイスドライバ|仮想 NIC デバイスドライバ。物理 NIC...
|sted|ユーザモードデーモン|仮想 NIC デーモン。仮想 NIC ド...
|stehub|ユーザモードデーモン|仮想ハブ。TCP ポート 80 番で...
各々のプログラムの役割や実装方法についても SoftEther の考...
-カーネルモードで動作する仮想 NIC のデバイスドライバを動...
-仮想 NIC ドライバは、 アプリケーションからは実在の NIC ...
-仮想ハブと仮想 NIC との通信はユーザモードのデーモンで行...
- 仮想ハブと仮想 NIC デーモンとの通信には TCP を使う。
#ref(http://www.whiteboard.ne.jp/~admin2/pict/ste_stream....
※ この図は分かりやすくするために簡略化して記述しています。
逆に SoftEther にあってこのプログラムに無いものは・・
-仮想ハブと仮想 NIC 間の通信の暗号化機能
-仮想ハブへの接続時のユーザ認証機能
-仮想ハブでの接続機能
-仮想ハブでのパケットフィルタリング機能
-プロキシー, SOCKS, SSH 経由での接続
-仮想ハブの VLAN 機能
-ロギング機能
-・・・などなどなど・・・
無いものだらけです。(泣)仮想 NIC ドライバづくりで体力使...
*ソースファイルとダウンロード [#idaa191f]
>ソースファイル: [[vpn-ste-0.1.tar.gz>http://github.com/d...
|>|CENTER:tar ファイルに含まれるファイル|h
|Makefile|ste ドライバ、sted、stehub コマンド用の Makefile|
|ste.c|仮想 NIC デバイスドライバ|
|ste.conf|ドライバ設定ファイル。(driver.conf(4))|
|ste.h |ヘッダーファイル|
|sted.c|仮想 NIC デーモン|
|stehub.c |仮想 HUB|
本プログラムは Sparc マシンの 64bit Solaris 9、Solaris 10...
*解説 [#c31865f4]
** ste:仮想 NIC ドライバ [#g9a85216]
今回のプログラムのなかで一番苦労したのがこれです。実装法...
まず、Solaris 上で動作する NIC のデバイスドライバを作ろう...
-GLD(Generic LAN Driver)フレームワークを利用し、GLD ベー...
-ゼロから全て書く。
GLD とは Solaris が提供しているネットワークインターフェー...
今回作ろうとしているのは仮想 NIC のドライバで、もともとハ...
+open(9E)、close(9E) のルーチンを gld(7D)が提供しているた...
+制御用のメッセージなど、特殊なメッセージを送受することが...
つまりは、「そんな変な使い方すんな!」というところでしょ...
+DLPI Style 1 データリンクサービスプロバイダ
+DLPI Style 2 データリンクサービスプロバイダ
簡単に言うと、「/dev/hme0」の様に「0」というインスタンス...
DLS プロバイダとして提供しなければならないサービスはたく...
|プリミティブ|内容|h
|DL_INFO_REQ |情報要求|
|DL_BIND_REQ |SAP のバインド|
|DL_UNBIND_REQ |SAP のバインド解除|
|DL_ATTACH_REQ |PPA をアッタチ|
|DL_DETACH_REQ |PPA をデタッチ|
|DL_PROMISCON_REQ |無差別受信モードを有効にする|
|DL_PHYS_ADDR_REQ |物理アドレスの取得要求|
|DL_SET_PHYS_ADDR_REQ |物理アドレスのセット要求|
|DL_UNITDATA_REQ |データグラム送信要求|
|DL_UNITDAT_IND |データの到着通知|
DLPI、プリミティブについてはSolaris DLPI プログラミングも...
[[其の2>Solaris で SoftEther もどきを動かそう/其の2]]のコ...
|プリミティブ |内容|h
|DL_ENABMULTI_REQ |マルチキャストアドレスを有効にする|
**sted: 仮想 NIC デーモン [#p6252013]
カーネルモードで動作する仮想 NIC ドライバと仮想ハブとの間...
以下、プログラム内での実際の動きをご説明します。仮想 NIC ...
仮想 NIC デーモンは getmsg(2) システムコールを利用して、...
typedef struct stehead
{
int len; /* パディング後のデータサイズ */
int orglen; /* パディングする前のサイズ。 */
} stehead_t;
逆に、仮想ハブからデータを受信した場合には上記の stehead ...
※ ちなみに「デーモン」と名前がついていますが、端末の切り...
**stehub: 仮想 ハブ [#yce9eebe]
仮想ハブは、実際のハブのように、あるポート(仮想 NIC デー...
中身としては、ほとんど特筆すべきところはなく、TCP ポート ...
struct conn_stat {
struct conn_stat *next; /* 次の conn_stat 構造体のポ...
int fd; /* FD */
struct in_addr addr; /* 接続してきている仮想 NIC ...
};
お粗末なコードなので、パケットの受け渡しがかなり非効率に...
*インストール [#c0e96d1f]
**コンパイル&インストール [#n7c37c00]
コンパイルには gcc を使います。make をそのまま実行した場...
# make
gcc ste.c -D_KERNEL -c -m64
/usr/ucb/ld -dn -r ste.o -o ste
gcc sted.c -o sted -lsocket -lnsl
gcc stehub.c -o stehub -lsocket -lnsl
#
ste ドライバのインストール、およびカーネルへのロード、ste...
# make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
#
仮想 NIC のデバイス名は ste になります。
# ls -l /dev/ste
lrwxrwxrwx 1 root other 29 10月 28日 23:3...
# ls -l /devices/pseudo/clone@0:ste
crw------- 1 root sys 11,215 11月 13日 23:5...
#
sted 、stehub デーモンについてはコピーは行われません。適...
**アンインストール [#kd5f4821]
ドライバのアンインストールは make uninstall で行います。
# make uninstall
/usr/sbin/rem_drv ste
/bin/rm /kernel/drv/sparcv9/ste
/bin/rm /kernel/drv/ste.conf
#
同時に ste ドライバのアンロード、ste デバイスノードの削除...
# make uninstall
/usr/sbin/rem_drv ste
デバイスは使用中です
Cannot unload module: ste
Will be unloaded upon reboot.
/bin/rm /kernel/drv/sparcv9/ste
/bin/rm /kernel/drv/ste.conf
#
*使い方 [#w4edbe6a]
仮想 NIC ドライバ、仮想 NIC デーモン、仮想ハブデーモンの...
**仮想 NIC ドライバ [#m0b86192]
仮想 NIC のデバイス名は ste で、/dev/ste からアクセスでき...
ただし、MAC アドレスはデフォルト値が振られてしまいますの...
# ifconfig ste0 plumb
# ifconfig ste0 10.0.0.55 up
# ifconfig ste0 ether 8:0:20:0:0:55
# ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4>...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.73.55 netmask ffffff00 broadcast 172....
ether 8:0:20:c6:69:c7
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 10.0.0.55 netmask ff000000 broadcast 10.255....
ether 8:0:20:0:0:55
# snoop -d ste0
Using device /dev/ste (promiscuous mode)
10.0.0.90 -> (broadcast) ARP C Who is 10.0.0.55, 10.0...
10.0.0.55 -> 10.0.0.90 ARP R 10.0.0.55, 10.0.0.55 i...
10.0.0.90 -> 10.0.0.55 ICMP Echo request (ID: 543 S...
10.0.0.55 -> 10.0.0.90 ICMP Echo reply (ID: 543 Seq...
#
ste は実デバイスが存在しない仮想デバイスなので、/kernel/d...
デフォルトではインスタンス 0(=ste0)だけが有効なインスタ...
ste.conf ファイルの中身
name="ste" parent="pseudo" instance=0;
上記の instance=0 の「0」が仮想デバイスのインスタンスにな...
以下のようにインスタンス 1、インスタンス 2、という行を追...
name="ste" parent="pseudo" instance=1;
name="ste" parent="pseudo" instance=2;
**仮想ハブ(プログラム名 stehub) [#we001c22]
特に起動オプション等はありませんのでそのまま実行してくだ...
# ./stehub &
[1] 312
#
**仮想 NIC デーモン(プログラム名 sted) [#j59a214a]
起動時に ste デバイスのインスタンス番号と接続する仮想ハブ...
Usage: ./sted [ -i instance] [-h hostname]
# ./sted -i 0 -h hub.example.com &
[1] 452
connected with HUB
#
*設定例 [#a1619d7d]
**Host to Host [#of96f376]
それぞれ別々の物理ネットワークに繋がった2つのホストを、...
以下の例では分かりやすくするために、仮想ハブと仮想 NIC デ...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
--ホストA ... 仮想ハブデーモンが動作するホスト。ホストB、...
--ホストB ... 仮想 NIC ドライバがインストールされており、...
--ホストC ... 仮想 NIC ドライバがインストールされており、...
***ホストAの設定 [#z64615c9]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動
hostA # ./stehub &
[1] 1125
hostA #
***ホストBの設定 [#v41df981]
+仮想 NIC ドライバーをインストール。
hostB # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostB #
+仮想 NIC デーモン sted をシステムにコピー。
hostB # cp sted /usr/local/bin
hostB #
+仮想 NIC ste0 を設定
hostB # ifconfig ste0 plumb
hostB # ifconfig ste0 192.168.0.1 up
hostB # ifconfig ste0 ether 8:0:20:0:0:1
hostB # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.73.55 netmask ffffff00 broadcast 172....
ether 8:0:20:c6:69:c7
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 192.168.0.1 netmask ffffff00 broadcast 192.1...
ether 8:0:20:0:0:1
hostB #
+仮想 NIC デーモン sted を起動
hostB # /usr/local/bin/sted -h hostA &
[1] 534
connected with HUB
hostB #
***ホストCの設定 [#hb6bdd60]
+仮想 NIC ドライバーをインストール。
hostC # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostC #
+仮想 NIC デーモン sted をシステムにコピー。
hostC # cp sted /usr/local/bin
hostC #
+仮想 NIC ste0 を設定
hostC # ifconfig ste0 plumb
hostC # ifconfig ste0 192.168.0.2 up
hostC # ifconfig ste0 ether 8:0:20:0:0:2
hostC # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.80.33 netmask ffffff00 broadcast 172....
ether 8:0:20:d3:da:8a
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 192.168.0.2 netmask ffffff00 broadcast 192.1...
ether 8:0:20:0:0:2
hostC #
+仮想 NIC デーモン sted を起動
hostC # /usr/local/bin/sted -h hostA &
[1] 1022
connected with HUB
hostC #
**Host to LAN [#x07392ec]
遠隔地にあるホストをローカルの LAN に参加させるための設定...
ただし、brdg モジュールはもともとこのような使い方を想定し...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
--ホストA ... 仮想ハブデーモンが動作するホスト。ホストB、...
--ホストB ... 仮想 NIC ドライバがインストールされており、...
--ホストC ... 仮想 NIC ドライバがインストールされており、...
--ホストD ... ホストC と同一ネットワークにいる任意ホスト...
***ホストAの設定 [#kc674255]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動
hostA # ./stehub &
[1] 1125
hostA #
***ホストBの設定 [#o748217e]
+仮想 NIC ドライバーをインストール。
hostB # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostB #
+仮想 NIC デーモン sted をシステムにコピー。
hostB # cp sted /usr/local/bin
hostB #
+仮想 NIC ste0 を設定(ホストC、ホストD の実ネットワーク...
hostB # ifconfig ste0 plumb
hostB # ifconfig ste0 172.29.80.55 netmask 255.255.255.0...
hostB # ifconfig ste0 ether 8:0:20:0:0:1
hostB # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.73.55 netmask ffffff00 broadcast 172....
ether 8:0:20:c6:69:c7
ste0: flags=1001843<UP,BROADCAST,RUNNING,MULTICAST,MULTI...
inet 172.29.80.55 netmask ffffff00 broadcast 172....
ether 8:0:20:0:0:1
hostB #
+仮想 NIC デーモン sted を起動
hostB # /usr/local/bin/sted -h hostA &
[1] 534
connected with HUB
hostB #
***ホストCの設定 [#v9f89668]
+仮想 NIC ドライバーをインストール。
hostC # make install
/bin/cp ste /kernel/drv/sparcv9/ste
/bin/cp ste.conf /kernel/drv/ste.conf
/usr/sbin/add_drv ste
hostC #
+仮想 NIC デーモン sted をシステムにコピー。
hostC # cp sted /usr/local/bin
hostC #
+brdg ブリッジモジュールをインストール。(詳しくは「[[Sol...
hostC # make install
/bin/cp brdg /kernel/strmod/sparcv9/brdg
/usr/sbin/modload brdg
hostC #
+仮想 NIC ste0 と実 NIC hme0 をブリッジ接続する。
hostC # ./brdgadm -a hme0
hme0 successfully added. (muxid=10)
hostC # ./brdgadm -a ste0
ste0 successfully added. (muxid=11)
このとき、ifconfig では以下のように見える。(ste0 は見え...
hostC # ifconfig -a
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> m...
inet 127.0.0.1 netmask ff000000
hme0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 172.29.80.33 netmask ffffff00 broadcast 172....
ether 8:0:20:d3:da:8a
hostC #
+仮想 NIC デーモン sted を起動
hostC # /usr/local/bin/sted -h hostA &
[1] 1022
connected with HUB
hostC #
*今後の課題 [#oc42482c]
+パフォーマンスの向上!!
現在、仮想 NIC での通信では、以下のように物理ネットワーク...
--仮想ハブ、仮想 NIC 間が 100MFDX で接続している場合・・...
--仮想ハブ、仮想 NIC 間が 10MHDX で接続している場合・・・...
--仮想ハブとインターネット経由(下り 1.2Mbps、上り 512Kbp...
もちろん、仮想 HUB、仮想 NIC が動作しているホスト自身のス...
+SoftEther の仮想ハブとの接続
~自前でプロトコルを調べるのは難しそうなので、公開されたら...
+プロキシー経由での仮想ハブへの接続。
~これができないと、ほとんどの環境でメリットないですよね?
ページ名: