開始行:
#norelated
*Solaris で SoftEther もどきを動かそう/其の2
*目次 [#t475d872]
#contents
* ご注意 [#nd5692c3]
>ここで紹介しているプログラムは、カーネルモジュールを含ん...
また、本プログラムではプロキシサーバ経由での接続により、...
本プログラムの使用により発生したトラブルなど、いかなる損...
*お知らせ [#d7e3fc92]
**(2005-02-19) [#z04905c9]
以前、仮想 NIC ドライバのドライバ名を "sfe" としていま...
ページに来られたかたがいらっしゃいましたら、お探しのドラ...
**(2006-11-05) [#kf4b5628]
ste ドライバの実装を大幅に変更しました。変更点については[...
及び|[[ste.c>source:vpn_2/ste.c]] をご参照ください。
論理的にはパフォーマンスの改善が見込まれる・・はずだった...
になっているようで、実測値はほとんど変わりませんでした。...
そのほか、configure スクリプトを採用することでプラットフ...
インストールが可能になりました。&br;
しかし、基本的な使い方は変わっていません。
**(2012-01-03) [#x95233f3]
Solaris 11 でコンパイル可能なように変更をおこないました。...
* 変更点の概要 [#id5b1436]
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]で作...
**仮想 NIC ドライバへの変更 [#f415bc83]
+ 仮想ハブのオープンした STREAM の stream head の queue ...
+ロックの取り方を大幅に変更し、同時実行性を向上させた。(2...
+MAC アドレスをドライバーのロード時に自動的にユニークな番...
これにより、いちいち自分で MAC アドレスを変更する必要が無...
+ 物理 NIC のように Link Down/Link Up メッセージが出るよ...
これにより、仮想 NIC デーモン sted が落ちているのを messa...
**仮想 NIC デーモンへの変更 [#hf17adaa]
+CONNECT メソッドを利用した、プロキシサーバ経由での接続を...
+仮想ハブのポート番号を指定できるようにした。
+バックグラウンドで実行されるようにし、各種エラーメッセー...
+送受信で使うバッファーサイズを 2 Kbyte から 32 Kbyteに変...
+仮想 NIC ドライバから読み込んだデータをできるだけまとめ...
+DLPI 関連のコードを dlpiutil.c にまとめ、メインのコード...
**仮想ハブへの変更 [#g94a2a6b]
+ 受信用のバッファサイズを 500byte から 32K bytes に変更。
+接続を待ち受けるポート番号を指定できるようにした。
+バックグラウンドで実行されるようにした。各種エラーメッセ...
仮想ハブへのプロキシサーバ経由の接続は、HTTP の CONNECT ...
*ソースファイルとダウンロード [#dc66a4c9]
>ソースファイル: [[kaizawa-vpn-ste.tar.gz>https://github....
|>|CENTER:tar ファイルに含まれるファイル|h
|configure|configure ファイル。Makefile を作成する。|
|ste.c|仮想 NIC デバイスドライバ|
|ste.conf|ドライバ設定ファイル。(driver.conf(4))|
|ste.h|仮想 NIC ドライバ用のヘッダーファイル|
|sted.h|仮想 NIC デーモン用のヘッダーファイル|
|sted.c |仮想 NIC デーモンのメインソースコード|
|dlpiutil.c|仮想NICデーモンが使う DLPI 関連のソースコード|
|dlpiutil.h|dlpiutil.c で使うヘッダーファイル|
|sted_socket.c|仮想 NIC デーモンの Socket 処理に関わるソ...
|stehub.c|仮想 HUB|
ソースコードはこちらから参照していただくこともできます。
>>
http://github.com/kaizawa/vpn-ste
<<
*動作確認済み Solaris バージョン [#t7748ac3]
本プログラム動作確認状況は以下のようになっています。
|プラットフォーム&br;Solarisバージョン|Sparc(32bit)|Sparc...
|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c
|Solaris9|?|○|?|?|
|Solaris10|-|○|○|?|
|Solaris11|-|?|-|○|
○:動作確認済み ×:動作不可 ?:未確認 -:該当なし
*変更点の解説 [#g09af8a5]
** ste:仮想 NIC ドライバ [#n6e1a1ba]
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]のド...
2006/11/05 -&br;
これまでは非常にざっくりとしたロックの取り方をしていたの...
な状況がしばし発生していました。
そこでロックを細かく分け、またなるべくロックの取得をしな...
**sted: 仮想 NIC デーモン [#gffd0eb3]
***プロキシサーバ接続機能 [#x1d14ee4]
起動時の -p オプションで、プロキシサーバ名、ポート番号を...
CONNECT <仮想ハブ名>:<ポート番号> HTTP/1.1<CR><LF>
Host: <仮想ハブ名>:<ポート番号><CR><LF>
<CR><LF>
正直いいますと、プロキシサーバ経由で外部と接続できるテス...
***パフ ォーマンスの向上 [#ufd348c0]
仮想 NIC ドライバーから getmsg(2) で受け取るメッセージの...
これではとても効率が悪いので、getmsg(2) から受け取ったメ...
また、一定時間内に(0.4 秒)バッファが定量値までたまらな...
***デーモン化 [#bba1ec49]
sted が実行されると、/dev/ste のオープンし、仮想ハブへの...
+fork(2) し、子プロセスを作成
+子プロセスは標準入出力、標準エラー出力をクローズする。
+子プロセスは setsid(2) を実行し新セッションの開始
+親プロセスは終了する。
標準出力、エラー出力先をクローズしてしまったので、エラー...
**stehub: 仮想 ハブ [#c384882e]
仮想ハブについては相変わらずあまり手を加えていません。た...
*インストール [#n073b090]
**コンパイル&インストール [#y04aabc5]
configure スクリプトにて Makefile を作成し、つづけて make...
# ./configure
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for isainfo... yes
checking for uname... yes
checking for cut... yes
configure: creating ./config.status
config.status: creating Makefile
#
# make
gcc -c -O -D_KERNEL -D_SYSCALL32 -m64 -DSOL10 ste.c -o s...
/usr/ccs/bin/ld -dn -r ste.o -o ste
gcc -c -g -O2 sted.c -o sted.o
gcc -c -g -O2 sted_socket.c -o sted_socket.o
gcc -c -g -O2 dlpiutil.c -o dlpiutil.o
gcc -g -O2 -lsocket -lnsl sted.o sted_socket.o dlpiutil....
gcc -c -g -O2 stehub.c -o stehub.o
gcc -g -O2 -lsocket -lnsl stehub.o -o stehub
#
ste ドライバのインストール、およびカーネルへのロード、ste...
# make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/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 12月 23日 01:4...
#
**アンインストール [#s835fd1a]
ドライバのアンインストールは make uninstall で行います。
# make uninstall
/usr/sbin/rem_drv ste
/bin/rm /kernel/drv/sparcv9/ste
/bin/rm /kernel/drv/ste.conf
/bin/rm /usr/local/bin/sted
/bin/rm /usr/local/bin/stehub
#
同時に 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
/bin/rm /usr/local/bin/sted
/bin/rm /usr/local/bin/stehub
#
*使い方 [#h6403bae]
仮想 NIC ドライバ、仮想 NIC デーモン、仮想ハブデーモンの...
**仮想 NIC ドライバ [#ve3397e5]
仮想 NIC のデバイス名は ste で、/dev/ste からアクセスでき...
-2006/11/05 MACアドレスはドライバーのロード時に自動的にユ...
# ifconfig ste0 plumb
# ifconfig ste0 10.0.0.55 up
# ifconfig -a
lo0: flags=2001000849<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=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 10.0.0.55 netmask ff000000 broadcast 10.255...
ether a:0:20:69:c:d1
^^^^^^^^^^^^^^ <-- 自動割当
# 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) [#c36fcb79]
仮想 NIC デーモンからの接続を待ち受けるポートを -p オプシ...
Usage: stehub [ -p port] [-d level]
-p port : Port nubmer
-d level : Debug level[0-1]
# stehub -p 8888
Going to background mode
#
**仮想 NIC デーモン(プログラム名 sted) [#qda76d4b]
起動時に ste デバイスのインスタンス番号と接続する仮想ハブ...
仮想ハブ、プロキシサーバのポート番号はそれぞれのホスト名...
Usage: sted [ -i instance] [-h hub[:port]] [ -p proxy[:p...
-i instance : Instance number of the ste device
-h hub[:port] : Virtual HUB and its port number
-p proxy[:port] : Proxy server and its port number
-d level : Debug level[0-3]
# sted -i 0 -h hub.example.com:8888
Successfully connected with HUB
Going to background mode
#
*設定例 [#w2625c51]
**Host to Host (プロキシサーバ経由) [#b5f5cc7a]
それぞれ別々の物理ネットワークに繋がった2つのホストを、...
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]の設...
以下の例では分かりやすくするために、仮想ハブと仮想 NIC デ...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
-ホストA ... 仮想ハブデーモンが動作するホスト。ホストB が...
-ホストB ... 仮想 NIC ドライバがインストールされており、...
-ホストC ... 仮想 NIC ドライバがインストールされており、...
-プロキシ ... ホスト C が繋がっているローカルネットワーク...
***ホストAの設定 [#m4e5059b]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動(TCP ポート 8888 で待機)
hostA # /usr/local/bin/stehub -p 8888
Going to background mode
hostA #
***ホストBの設定 [#pcac1c78]
+仮想 NIC ドライバーをインストール。
hostB # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
hostB #
+仮想 NIC ste0 を設定
hostB # /usr/sbin/ifconfig ste0 plumb
hostB # /usr/sbin/ifconfig ste0 192.168.0.1 up
hostB # /usr/sbin/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,IPv4>...
inet 192.168.0.1 netmask ffffff00 broadcast 192.1...
ether a:0:20:69:c:d1
hostB #
+仮想 NIC デーモン sted を起動。仮想ハブに接続に行く。
hostB # /usr/local/bin/sted -h hostA:8888
Successfully connected with HUB
Going to background mode
hostB #
***ホストCの設定 [#o51a4cec]
+仮想 NIC ドライバーをインストール。
hostC # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
hostC #
+ 仮想 NIC ste0 を設定
hostC # /usr/sbin/ifconfig ste0 plumb
hostC # /usr/sbin/ifconfig ste0 192.168.0.2 up
hostC # /usr/sbin/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,IPv4>...
inet 192.168.0.2 netmask ffffff00 broadcast 192.1...
ether a:0:20:7c:1a:e5
hostC #
+ 仮想 NIC デーモン sted を起動。プロキシサーバ経由で仮想...
hostC # /usr/local/bin/sted -h hostA:8888 -p Proxy:8080
Successfully connected with HUB
Going to background mode
hostC #
**Host to LAN(プロキシサーバ経由) [#ga626065]
遠隔地にあるホストをローカルの LAN に参加させるための設定...
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]設定...
ただし、brdg モジュールはもともとこのような使い方を想定し...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
-ホストA ... 仮想ハブデーモンが動作するホスト。ホストB が...
-ホストB ... 仮想 NIC ドライバがインストールされており、...
-ホストC ... 仮想 NIC ドライバがインストールされており、...
-ホストD ... ホストC と同一ネットワークにいる任意ホスト。...
-プロキシ ... ホスト C ,ホスト D が繋がっているネットワー...
***ホストAの設定 [#p16437ae]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動(TCP ポート 8888 で待機)
hostA # /usr/local/bin/stehub -p 8888
Going to background mode
hostA #
***ホストBの設定 [#ea94f0cc]
+ 仮想 NIC ドライバーをインストール。
hostB # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
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,IPv4>...
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:8888
Successfully connected with HUB
Going to background mode
hostB #
***ホストCの設定 [#ad9225b7]
+仮想 NIC ドライバーをインストール。
hostC # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
hostC #
+ brdg ブリッジモジュールをインストール。(詳しくは「[[So...
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:8888 -p Proxy:8080
Successfully connected with HUB
Going to background mode
hostC #
*既知の問題 [#xd7cd378]
実は、上記設定ではホスト B と ホスト C の直接の通信ができ...
もちろんホスト B からホスト D など他のホストとの通信は可...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/brdg_issue....
+仮想 NIC デーモンからホスト C 宛ての Ethernet フレームが...
+仮想 NIC ドライバは、受け取った Ethernet フレームをブリ...
+ブリッジモジュールは、受け取った Ethenet フレームを実 NI...
+ 実 NIC ドライバは、受け取った Ethernet フレームを実 NIC...
*今後の課題 [#aabfc36f]
+まだまだ、パフォーマンスの向上
数々の変更により、「[[其の1>Solaris で SoftEther もどきを...
--Host To Host の構成で、仮想ハブ、仮想 NIC 間が 100MFDX ...
---[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]...
---[[其の2>Solaris で SoftEther もどきを動かそう/其の2]]...
--Host To Host の構成で 仮想ハブとインターネット経由(下...
---[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]...
---[[其の2>Solaris で SoftEther もどきを動かそう/其の2]]...
ローカル LAN 内でのテストでは格段にパフォーマンスが向上し...
・・・が、インターネット経由での接続の場合、私の環境では...
+SoftEther の仮想ハブとの接続
SoftEther 2.0 のベータが公開されたようですが、まだプロト...
終了行:
#norelated
*Solaris で SoftEther もどきを動かそう/其の2
*目次 [#t475d872]
#contents
* ご注意 [#nd5692c3]
>ここで紹介しているプログラムは、カーネルモジュールを含ん...
また、本プログラムではプロキシサーバ経由での接続により、...
本プログラムの使用により発生したトラブルなど、いかなる損...
*お知らせ [#d7e3fc92]
**(2005-02-19) [#z04905c9]
以前、仮想 NIC ドライバのドライバ名を "sfe" としていま...
ページに来られたかたがいらっしゃいましたら、お探しのドラ...
**(2006-11-05) [#kf4b5628]
ste ドライバの実装を大幅に変更しました。変更点については[...
及び|[[ste.c>source:vpn_2/ste.c]] をご参照ください。
論理的にはパフォーマンスの改善が見込まれる・・はずだった...
になっているようで、実測値はほとんど変わりませんでした。...
そのほか、configure スクリプトを採用することでプラットフ...
インストールが可能になりました。&br;
しかし、基本的な使い方は変わっていません。
**(2012-01-03) [#x95233f3]
Solaris 11 でコンパイル可能なように変更をおこないました。...
* 変更点の概要 [#id5b1436]
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]で作...
**仮想 NIC ドライバへの変更 [#f415bc83]
+ 仮想ハブのオープンした STREAM の stream head の queue ...
+ロックの取り方を大幅に変更し、同時実行性を向上させた。(2...
+MAC アドレスをドライバーのロード時に自動的にユニークな番...
これにより、いちいち自分で MAC アドレスを変更する必要が無...
+ 物理 NIC のように Link Down/Link Up メッセージが出るよ...
これにより、仮想 NIC デーモン sted が落ちているのを messa...
**仮想 NIC デーモンへの変更 [#hf17adaa]
+CONNECT メソッドを利用した、プロキシサーバ経由での接続を...
+仮想ハブのポート番号を指定できるようにした。
+バックグラウンドで実行されるようにし、各種エラーメッセー...
+送受信で使うバッファーサイズを 2 Kbyte から 32 Kbyteに変...
+仮想 NIC ドライバから読み込んだデータをできるだけまとめ...
+DLPI 関連のコードを dlpiutil.c にまとめ、メインのコード...
**仮想ハブへの変更 [#g94a2a6b]
+ 受信用のバッファサイズを 500byte から 32K bytes に変更。
+接続を待ち受けるポート番号を指定できるようにした。
+バックグラウンドで実行されるようにした。各種エラーメッセ...
仮想ハブへのプロキシサーバ経由の接続は、HTTP の CONNECT ...
*ソースファイルとダウンロード [#dc66a4c9]
>ソースファイル: [[kaizawa-vpn-ste.tar.gz>https://github....
|>|CENTER:tar ファイルに含まれるファイル|h
|configure|configure ファイル。Makefile を作成する。|
|ste.c|仮想 NIC デバイスドライバ|
|ste.conf|ドライバ設定ファイル。(driver.conf(4))|
|ste.h|仮想 NIC ドライバ用のヘッダーファイル|
|sted.h|仮想 NIC デーモン用のヘッダーファイル|
|sted.c |仮想 NIC デーモンのメインソースコード|
|dlpiutil.c|仮想NICデーモンが使う DLPI 関連のソースコード|
|dlpiutil.h|dlpiutil.c で使うヘッダーファイル|
|sted_socket.c|仮想 NIC デーモンの Socket 処理に関わるソ...
|stehub.c|仮想 HUB|
ソースコードはこちらから参照していただくこともできます。
>>
http://github.com/kaizawa/vpn-ste
<<
*動作確認済み Solaris バージョン [#t7748ac3]
本プログラム動作確認状況は以下のようになっています。
|プラットフォーム&br;Solarisバージョン|Sparc(32bit)|Sparc...
|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c
|Solaris9|?|○|?|?|
|Solaris10|-|○|○|?|
|Solaris11|-|?|-|○|
○:動作確認済み ×:動作不可 ?:未確認 -:該当なし
*変更点の解説 [#g09af8a5]
** ste:仮想 NIC ドライバ [#n6e1a1ba]
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]のド...
2006/11/05 -&br;
これまでは非常にざっくりとしたロックの取り方をしていたの...
な状況がしばし発生していました。
そこでロックを細かく分け、またなるべくロックの取得をしな...
**sted: 仮想 NIC デーモン [#gffd0eb3]
***プロキシサーバ接続機能 [#x1d14ee4]
起動時の -p オプションで、プロキシサーバ名、ポート番号を...
CONNECT <仮想ハブ名>:<ポート番号> HTTP/1.1<CR><LF>
Host: <仮想ハブ名>:<ポート番号><CR><LF>
<CR><LF>
正直いいますと、プロキシサーバ経由で外部と接続できるテス...
***パフ ォーマンスの向上 [#ufd348c0]
仮想 NIC ドライバーから getmsg(2) で受け取るメッセージの...
これではとても効率が悪いので、getmsg(2) から受け取ったメ...
また、一定時間内に(0.4 秒)バッファが定量値までたまらな...
***デーモン化 [#bba1ec49]
sted が実行されると、/dev/ste のオープンし、仮想ハブへの...
+fork(2) し、子プロセスを作成
+子プロセスは標準入出力、標準エラー出力をクローズする。
+子プロセスは setsid(2) を実行し新セッションの開始
+親プロセスは終了する。
標準出力、エラー出力先をクローズしてしまったので、エラー...
**stehub: 仮想 ハブ [#c384882e]
仮想ハブについては相変わらずあまり手を加えていません。た...
*インストール [#n073b090]
**コンパイル&インストール [#y04aabc5]
configure スクリプトにて Makefile を作成し、つづけて make...
# ./configure
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for isainfo... yes
checking for uname... yes
checking for cut... yes
configure: creating ./config.status
config.status: creating Makefile
#
# make
gcc -c -O -D_KERNEL -D_SYSCALL32 -m64 -DSOL10 ste.c -o s...
/usr/ccs/bin/ld -dn -r ste.o -o ste
gcc -c -g -O2 sted.c -o sted.o
gcc -c -g -O2 sted_socket.c -o sted_socket.o
gcc -c -g -O2 dlpiutil.c -o dlpiutil.o
gcc -g -O2 -lsocket -lnsl sted.o sted_socket.o dlpiutil....
gcc -c -g -O2 stehub.c -o stehub.o
gcc -g -O2 -lsocket -lnsl stehub.o -o stehub
#
ste ドライバのインストール、およびカーネルへのロード、ste...
# make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/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 12月 23日 01:4...
#
**アンインストール [#s835fd1a]
ドライバのアンインストールは make uninstall で行います。
# make uninstall
/usr/sbin/rem_drv ste
/bin/rm /kernel/drv/sparcv9/ste
/bin/rm /kernel/drv/ste.conf
/bin/rm /usr/local/bin/sted
/bin/rm /usr/local/bin/stehub
#
同時に 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
/bin/rm /usr/local/bin/sted
/bin/rm /usr/local/bin/stehub
#
*使い方 [#h6403bae]
仮想 NIC ドライバ、仮想 NIC デーモン、仮想ハブデーモンの...
**仮想 NIC ドライバ [#ve3397e5]
仮想 NIC のデバイス名は ste で、/dev/ste からアクセスでき...
-2006/11/05 MACアドレスはドライバーのロード時に自動的にユ...
# ifconfig ste0 plumb
# ifconfig ste0 10.0.0.55 up
# ifconfig -a
lo0: flags=2001000849<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=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4>...
inet 10.0.0.55 netmask ff000000 broadcast 10.255...
ether a:0:20:69:c:d1
^^^^^^^^^^^^^^ <-- 自動割当
# 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) [#c36fcb79]
仮想 NIC デーモンからの接続を待ち受けるポートを -p オプシ...
Usage: stehub [ -p port] [-d level]
-p port : Port nubmer
-d level : Debug level[0-1]
# stehub -p 8888
Going to background mode
#
**仮想 NIC デーモン(プログラム名 sted) [#qda76d4b]
起動時に ste デバイスのインスタンス番号と接続する仮想ハブ...
仮想ハブ、プロキシサーバのポート番号はそれぞれのホスト名...
Usage: sted [ -i instance] [-h hub[:port]] [ -p proxy[:p...
-i instance : Instance number of the ste device
-h hub[:port] : Virtual HUB and its port number
-p proxy[:port] : Proxy server and its port number
-d level : Debug level[0-3]
# sted -i 0 -h hub.example.com:8888
Successfully connected with HUB
Going to background mode
#
*設定例 [#w2625c51]
**Host to Host (プロキシサーバ経由) [#b5f5cc7a]
それぞれ別々の物理ネットワークに繋がった2つのホストを、...
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]の設...
以下の例では分かりやすくするために、仮想ハブと仮想 NIC デ...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
-ホストA ... 仮想ハブデーモンが動作するホスト。ホストB が...
-ホストB ... 仮想 NIC ドライバがインストールされており、...
-ホストC ... 仮想 NIC ドライバがインストールされており、...
-プロキシ ... ホスト C が繋がっているローカルネットワーク...
***ホストAの設定 [#m4e5059b]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動(TCP ポート 8888 で待機)
hostA # /usr/local/bin/stehub -p 8888
Going to background mode
hostA #
***ホストBの設定 [#pcac1c78]
+仮想 NIC ドライバーをインストール。
hostB # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
hostB #
+仮想 NIC ste0 を設定
hostB # /usr/sbin/ifconfig ste0 plumb
hostB # /usr/sbin/ifconfig ste0 192.168.0.1 up
hostB # /usr/sbin/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,IPv4>...
inet 192.168.0.1 netmask ffffff00 broadcast 192.1...
ether a:0:20:69:c:d1
hostB #
+仮想 NIC デーモン sted を起動。仮想ハブに接続に行く。
hostB # /usr/local/bin/sted -h hostA:8888
Successfully connected with HUB
Going to background mode
hostB #
***ホストCの設定 [#o51a4cec]
+仮想 NIC ドライバーをインストール。
hostC # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
hostC #
+ 仮想 NIC ste0 を設定
hostC # /usr/sbin/ifconfig ste0 plumb
hostC # /usr/sbin/ifconfig ste0 192.168.0.2 up
hostC # /usr/sbin/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,IPv4>...
inet 192.168.0.2 netmask ffffff00 broadcast 192.1...
ether a:0:20:7c:1a:e5
hostC #
+ 仮想 NIC デーモン sted を起動。プロキシサーバ経由で仮想...
hostC # /usr/local/bin/sted -h hostA:8888 -p Proxy:8080
Successfully connected with HUB
Going to background mode
hostC #
**Host to LAN(プロキシサーバ経由) [#ga626065]
遠隔地にあるホストをローカルの LAN に参加させるための設定...
[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]設定...
ただし、brdg モジュールはもともとこのような使い方を想定し...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/net_config_...
-ホストA ... 仮想ハブデーモンが動作するホスト。ホストB が...
-ホストB ... 仮想 NIC ドライバがインストールされており、...
-ホストC ... 仮想 NIC ドライバがインストールされており、...
-ホストD ... ホストC と同一ネットワークにいる任意ホスト。...
-プロキシ ... ホスト C ,ホスト D が繋がっているネットワー...
***ホストAの設定 [#p16437ae]
+仮想ハブデーモン stehub をシステムにコピー。
hostA # cp stehub /usr/local/bin/
hostA #
+仮想ハブデーモンを起動(TCP ポート 8888 で待機)
hostA # /usr/local/bin/stehub -p 8888
Going to background mode
hostA #
***ホストBの設定 [#ea94f0cc]
+ 仮想 NIC ドライバーをインストール。
hostB # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
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,IPv4>...
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:8888
Successfully connected with HUB
Going to background mode
hostB #
***ホストCの設定 [#ad9225b7]
+仮想 NIC ドライバーをインストール。
hostC # make install
/usr/sbin/install -s -f /kernel/drv/sparcv9 -m 0755 -u r...
/usr/sbin/install -s -f /kernel/drv -m 0644 -u root -g s...
/usr/sbin/install -s -d /usr/local/bin
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
/usr/sbin/install -s -f /usr/local/bin -m 0755 -u root s...
hostC #
+ brdg ブリッジモジュールをインストール。(詳しくは「[[So...
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:8888 -p Proxy:8080
Successfully connected with HUB
Going to background mode
hostC #
*既知の問題 [#xd7cd378]
実は、上記設定ではホスト B と ホスト C の直接の通信ができ...
もちろんホスト B からホスト D など他のホストとの通信は可...
#ref(http://www.whiteboard.ne.jp/~admin2/pict/brdg_issue....
+仮想 NIC デーモンからホスト C 宛ての Ethernet フレームが...
+仮想 NIC ドライバは、受け取った Ethernet フレームをブリ...
+ブリッジモジュールは、受け取った Ethenet フレームを実 NI...
+ 実 NIC ドライバは、受け取った Ethernet フレームを実 NIC...
*今後の課題 [#aabfc36f]
+まだまだ、パフォーマンスの向上
数々の変更により、「[[其の1>Solaris で SoftEther もどきを...
--Host To Host の構成で、仮想ハブ、仮想 NIC 間が 100MFDX ...
---[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]...
---[[其の2>Solaris で SoftEther もどきを動かそう/其の2]]...
--Host To Host の構成で 仮想ハブとインターネット経由(下...
---[[其の1>Solaris で SoftEther もどきを動かそう/其の1]]...
---[[其の2>Solaris で SoftEther もどきを動かそう/其の2]]...
ローカル LAN 内でのテストでは格段にパフォーマンスが向上し...
・・・が、インターネット経由での接続の場合、私の環境では...
+SoftEther の仮想ハブとの接続
SoftEther 2.0 のベータが公開されたようですが、まだプロト...
ページ名: