DD-WRTで遊んでみる -OpenVPNでリモートアクセスルータにする-

DD-WRTでOpenVPNに挑戦してみる

前回DD-WRT化したBuffalo WHR-HP-G54の使い道を考えてみました。
以前より、外から自宅の中にリモートアクセス、もしくは自宅から職場にリモートアクセスができたらいいなと思って
Packetix(今はSoftEtherVPN)などを挑戦しようとおもった事もありました。
ただ、上記だと常時稼働のサーバが必要になるのでどうしても電気代がかかります。
そこでRaspberryPiですよ!と言いたいのですが、ちょっと別用途に埋まっており機能共存させたくない(笑)

で、DD-WRTのOpenVPN機能というのに着目。
サーバなどを立ち上げてサイト間VPNやリモートVPNを実現できるものらしく、このサーバ機能をを持てるという話。
省電力なOpenVPNサーバを作ってみることにしました。

OpenVPN自体が初めてだったのでちょっと苦戦しました・・・。ので後で参考にするためにメモ。

参考になるサイト
http://www.dd-wrt.com/wiki/index.php/VPN_%28the_easy_way%29_v24%2B



■■ 環境 ■■
・OpenVPNサーバ:DD-WRT on WHR-HP-G54
・OpenVPNクライアント:Ubuntu12.04 LTS


■■ 前提 ■■
・前回の手順に従って、OpenVPNに対応したDD-WRTファームの入ったルータができている事


■■ テスト構成及び、目指す構成 ■■

テスト構成
vpn-テスト構成


目指す構成
VPN-接続構成





1.事前準備
※ルータでの作業

ルータにGUI画面の管理>コマンド実行の実行コマンドで以下を実行する。
nvram show | grep size
実行結果が表示されます。
size: 28613 bytes (4155 left)
コマンドを実行して、空きメモリを調べる。最低5.2KBの空きがないとダメらしい。



2.証明局、証明書の作成
※Ubuntuでの作業

①必要パッケージのインストール
$ sudo apt-get install openvpn openssl


②認証局・サーバ/クライアント証明書の作成等

rootになってから、作業ディレクトリに移動します。
$sudo su
#cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/

③varsファイルのバックアップ
#cp vars vars.original

④varsファイルの編集。
下記赤字の箇所を変更する。
# vim /etc/openvpn/easy-rsa/vars
KEY_COUNTRY=JP ←国名
KEY_PROVINCE=Tokyo ←県名
KEY_CITY=Shinagawa ←市町村名
KEY_ORG="MyHome" ←団体名
KEY_EMAIL="me@yhost.mydomain" ←メールアドレス
#vim vars

export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Shinagawa"
export KEY_ORG="MyHome"
export KEY_EMAIL="me@myhost.mydomain"
#export KEY_EMAIL=mail@host.domain
#export KEY_CN=changeme
#export KEY_NAME=changeme
#export KEY_OU=changeme
#export PKCS11_MODULE_PATH=changeme
#export PKCS11_PIN=1234


⑤設定ベースファイルのコピー
#cp openssl-1.0.0.cnf openssl.cnf


⑥認証局・証明書などを作成します

・事前準備
※基本的には先ほど設定したパラメータがデフォルト値となっているのでEnterでいけます。
# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys
#./clean-all

・認証局(CA)の証明書と鍵を作成
# ./build-ca
Generating a 1024 bit RSA private key
................................++++++
..++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinagawa]:
Organization Name (eg, company) [MyHome]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [MyHome CA]:
Name []:
Email Address [me@myhost.mydomain]:


・サーバ側の証明書、秘密鍵の作成
# ./build-key-server server
Generating a 1024 bit RSA private key
..............++++++
...................................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinagawa]:
Organization Name (eg, company) [MyHome]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [me@myhost.mydomain]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shinagawa'
organizationName :PRINTABLE:'MyHome'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'me@myhost.mydomain'
Certificate is to be certified until Apr 7 07:20:29 2023 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


・クライアント側の証明書、秘密鍵
※クライアントを複数つくることを想定して、「client1」としました。
# ./build-key client1
Generating a 1024 bit RSA private key
................................++++++
......++++++
writing new private key to 'client1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinagawa]:
Organization Name (eg, company) [MyHome]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Name []:
Email Address [me@myhost.mydomain]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/doc/openvpn/examples/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Shinagawa'
organizationName :PRINTABLE:'MyHome'
commonName :PRINTABLE:'client1'
emailAddress :IA5STRING:'me@myhost.mydomain'
Certificate is to be certified until Apr 7 07:22:01 2023 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


・DH 鍵共有パラメータを作成
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
....................................+...................+..............+............................+.........................+....+............................................+......+..+.................
(中略)
..................................................................................+......+.........................................++*++*++*



keysというフォルダにこんな感じのファイルができていれば成功。
これを使ってルータの設定を行います。
# ls -la ./keys
合計 76
drwx------ 2 root root 4096 4月 9 16:22 .
drwxr-xr-x 4 root root 4096 4月 9 16:16 ..
-rw-r--r-- 1 root root 3855 4月 9 16:20 01.pem
-rw-r--r-- 1 root root 3735 4月 9 16:22 02.pem
-rw-r--r-- 1 root root 1208 4月 9 16:18 ca.crt
-rw------- 1 root root 912 4月 9 16:18 ca.key
-rw-r--r-- 1 root root 3735 4月 9 16:22 client1.crt
-rw-r--r-- 1 root root 672 4月 9 16:22 client1.csr
-rw------- 1 root root 916 4月 9 16:22 client1.key
-rw-r--r-- 1 root root 245 4月 9 16:22 dh1024.pem
-rw-r--r-- 1 root root 213 4月 9 16:22 index.txt
-rw-r--r-- 1 root root 21 4月 9 16:22 index.txt.attr
-rw-r--r-- 1 root root 21 4月 9 16:20 index.txt.attr.old
-rw-r--r-- 1 root root 106 4月 9 16:20 index.txt.old
-rw-r--r-- 1 root root 3 4月 9 16:22 serial
-rw-r--r-- 1 root root 3 4月 9 16:20 serial.old
-rw-r--r-- 1 root root 3855 4月 9 16:20 server.crt
-rw-r--r-- 1 root root 672 4月 9 16:20 server.csr
-rw------- 1 root root 916 4月 9 16:20 server.key



3.ルータの設定(OpenVPN)

Webアクセスにてルータ(DD-WRT)の画面にログインする。

・Web画面から「ネットワーク -> PPTPサーバ/クライアント」の順にたどる。
・OpenVPNデーモンで下記設定を行う。
 Start OpenVPN デーモン : ON
 公開サーバー証明書: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/ca.crt
 公開クライアント証明書: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/server.crt
 Private Client Key: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/server.key
 DH PEM: /usr/share/doc/openvpn/examples/easy-rsa/2.0/keys/dh1024.pem

※ファイル名を指定している個所は、指定しているファイルの中身(テキスト)をボックスに張り付けることを意味しています。(catやlessなどで中身を表示して張り付ける)

次に「OpenVPN Config」の箇所に以下を張り付ける。
※最初の3行は自分のネットワーク環境にあわせてください。(上の図と見比べると対応がわかると思います。)
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 192.168.66.1"
server 192.168.66.0 255.255.255.0

dev tun0
proto udp
keepalive 10 120
dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem

# Only use crl-verify if you are using the revoke list - otherwise leave it commented out
# crl-verify /tmp/openvpn/ca.crl

# management parameter allows DD-WRT's OpenVPN Status web page to access the server's management port
# port must be 5001 for scripts embedded in firmware to work
management localhost 5001


これを張り付ける。
以上でサーバ側は完了。「設定」ボタンを押して設定を反映する。


4.ルータの設定(ルーティング、フィルタ)
DD-WRTのWeb画面で「管理->コマンド実行」の順にたどり、実行コマンドに以下を張り付け
※ここも自分の環境と合わせてください。
iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD 1 --source 192.168.66.0/24 -j ACCEPT
# These next two lines may or may not be necessary.
# I (dereks) did not need them, but bmatthewshea did.
# Thus, we include them so that this works for more people:
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT

下の「Firewallスクリプトとして保存」ボタンをクリック。


5.クライアント(Ubuntu)の設定
クライアントとするUbuntuにログインし、openVPN-clientの設定をする。
まず、設定サンプルをホームディレクトリにコピーする。
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/
自分がアクセスできるように所有権・アクセス権を変更し、内容を変更する。
変更箇所は以下
remote 192.168.100.253 1194

client
remote-cert-tls server
dev tun0
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
float
;comp-lzo

#If the pushed routes appear not to be added on windows hosts, add the following:
route-delay 30

ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key

※remoteで指定するIPは、VPNルータのWANIP。
 最後の3行に関しては、証明書ファイルを配置した場所・ファイル名にします。
 私は、ホームディレクトリに".openvpn"というディレクトリを作成しそこにcrient.cnfと証明書関連ファイル入れました。



6.接続確認
Ubuntuでターミナルを開いて、ipenvpnコマンドを実行する。
$ sudo openvpn client.conf
Wed Apr 10 10:34:30 2013 OpenVPN 2.2.1 i686-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Feb 27 2013
Wed Apr 10 10:34:30 2013 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Wed Apr 10 10:34:30 2013 LZO compression initialized
(中略)
Wed Apr 10 10:34:34 2013 TUN/TAP device tun0 opened
Wed Apr 10 10:34:34 2013 TUN/TAP TX queue length set to 100
Wed Apr 10 10:34:34 2013 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Apr 10 10:34:34 2013 /sbin/ifconfig tun0 192.168.66.6 pointopoint 192.168.66.5 mtu 1500
Wed Apr 10 10:34:34 2013 /sbin/route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.66.5
Wed Apr 10 10:34:34 2013 /sbin/route add -net 192.168.66.1 netmask 255.255.255.255 gw 192.168.66.5
Wed Apr 10 10:34:34 2013 Initialization Sequence Completed

こんな表示が出れば完了。
※ファイルの配置、アクセス権によっては、sudoは不要です。

もし定期的に
「Wed Apr 10 10:36:49 2013 Bad LZO decompression header byte: 42」
が表示されるようであれば、client.confの「comp-lzo」がコメントアウトされていることを確認する。
※もしくはサーバ側でも合わせれば良いはずだが・・・うまく行かなかった。



-確認-

うまく行けばTerminalでifconfigを見ると
tun0 Link encap:不明なネット ハードウェアアドレス 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inetアドレス:192.168.66.6 P-t-P:192.168.66.5 マスク:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 メトリック:1
RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:100
RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)

というインタフェースが追加されている。

また、「netstat -rn」コマンドで、VPNルータのLAN側のセグメント(192.168.1.0.0)向けのルーティングがtun0インタフェース向けに設定されていることがわかる。
$ netstat -rn
カーネルIP経路テーブル
受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタフェース
0.0.0.0 192.168.100.254 0.0.0.0 UG 0 0 0 eth0
10.82.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
192.168.1.0 192.168.66.5 255.255.255.0 UG 0 0 0 tun0
192.168.66.1 192.168.66.5 255.255.255.255 UGH 0 0 0 tun0
192.168.66.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0


試しに、リモートPC(Ubuntu)から自宅PC想定(Win)にTracerouteを試してみると
$ traceroute 192.168.1.131
traceroute to 192.168.1.131 (192.168.1.131), 30 hops max, 60 byte packets
1 192.168.66.1 (192.168.66.1) 24.173 ms 24.988 ms 25.964 ms
2 192.168.1.131 (192.168.1.131) 26.868 ms 27.784 ms 28.768 ms

となっており、Tunnelインタフェースを経由して到達していることがわかります。

ちなみに、Windows側(自宅相当)からTracerouteを試すと
C:\Users\user>tracert 192.168.66.6
192.168.66.6 へのルートをトレースしています。経由するホップ数は最大 30 です
1 1 ms <1 ms <1 ms DD-WRT [192.168.1.1]
2 3 ms 3 ms 3 ms 192.168.66.6
トレースを完了しました。


となり、ルータの先に直結されているイメージになっています。
これでリモートVPNが可能なルータができました♪


firewallルールなどちょっといじってみてもできたのですが、とりあえずWikiのものをそのまま使っています。
全体的に間違いあったらご指摘いただけると嬉しいです。



次回はこれをルータと言うよりも、省電力VPNサーバにしてみます。



DD-WRTで古いルータを復活してみる

DD-WRTで遊んでみる

またしても日経Linxuネタです。日経Linux4月号の「Linuxなら簡単何でも復活」という特集でDD-WRTというものを知った。
フリーのルータOSといった感じのもので、よくある家庭用ブロードバンドルータ(Buffalo,Corega...など)にインストールすることで、より高度な制御ができるルータにできちゃうらしいのです。
今回利用したBaffalo製のWHR-HP-G54などだと純正ファームウェアではWPAしか対応していないのがWPA2に対応できたりVPN機能を持たせたり、そのほかルータとしての機能もいろいろ強化できます。
ナニコレスゴイ。
というわけで、転がっていた「WHR-HP-G54」で遊んでみることにしました。


DD-WRTのオフィシャルサイト

事前に読んでおくべきあたり
Buffalo
Installation
TFTP Flash※TFTPで行う場合


【注意】当然のことながら、自己責任で実施してください。ルータが文鎮化(っていうの?)しても責任は持てません




1.事前準備

 ①対象ルータ用のファームウェアをダウンロードする
 
 上記サイトの「Router Database」から型名を入力して調べる。
 Supportedとなっていれば入れることができるようだよ。

 何も考えず推奨バージョン(v24perSP2[Beta]Build14896)のものをダウンロード。
 どれをダウンロードするかは
 http://www.dd-wrt.com/wiki/index.php/What_is_DD-WRT%3F
 に各ファームごとのサポート機能一覧が乗っているので確認する。
 今回は、「dd-wrt.v24_vpn_generic.bin」を選択した。


 インストール方法はいくつかあるみたいだけど、今回のルータはTFTPで行いました。
 (WebGUIからのインストールはエラーになってうまくいかなかった。)
 TFTP Flashの説明にある簡易TFTPサーバをダウンロードしておく。(TFTPであれば何でもよい。)
 以降はここでDLした「tftp2.exe」を利用する説明です。
 http://dd-wrt.com/wiki/index.php/TFTP_flash#Windows
 

 ②Buffaloファームの最新化
  やれと書いてあるけど、果たして必要かは不明。えっ?私はやりましたよ。

 ③ルータの初期化
  背面のINITボタンを長押しして、ルータを初期化する。
  (Web画面からでもいいと思います)

 ④PCの設定
  ・PCをルータのLAN側ポートにLANケーブルで接続する
  ・PCのIPアドレス、サブネットマスクを 
   192.168.11.2 255.255.255.0
   に設定しておく。
  ・TFTPサーバを起動して
   Server:192.168.11.1
   Password:なし
   File:先ほどダウンロードした「dd-wrt.v24_vpn_generic.bin」を選択

  ・ルータの電源ケーブルを抜いて電源をOFFにする。


2.インストール

本手順のポイントとしては、ルータブート中にTFTPでファイルをルータにアップロードするという事です。
 
 ①ルータの電源ON
  ルータに電源ケーブルを挿し、起動する。
 
 ②TFTPサーバのUpgradeボタンを押す
  ルータの” DIAG ”ランプが赤く点滅したら、すかさずファイルのアップロードを始めます。
  ※タイミングがあるみたいです。

  下のメッセージに「Firmware was upgraded successfully!」と表示されればアップロード成功です。
 
DDWRTファームアップロード


  しばらく待ちます。
  ルータが再起動され、DD-WRTファームウェアで起動してきます。

3.ルータへのログイン

 ①PCのIP設定をDHCPに変えます
 ②ブラウザでhttp://192.168.1.1にアクセスします
 
 DD-WRTの画面が表示されれば成功です。
DDWRT-Initial


パスワードの変更を行ってログインしてください。


4.日本語表示にする

Adminirationタブ>LanguageSelectionでJapaneseを選択して「ApplySetting」をクリックすると日本語表示になります。

以上で完了です。



今回はルータの細かい設定内容には触れません。
もともと、Buffaloの無線ルータの設定はどうもわかりづらいなと思っていたので、これでとっつきやすくなるとイイな♪
日本語になれば、ネットワークの知識が多少あれば基本的な使い方はできると思いますが
細かくはオフィシャルサイトのWikiが充実してそうなので参考になると思いますよ。



 

Debian-WheezyでUSB 無線LANアダプタを使うーその2

無線ドライバのインストール2 簡単版


前回、DebianでUSB無線アダプタをつかうためにカーネルの再構築まで行ったわけですが、その後カーネルに関する記事(日経Linux)を読んでいたら、ん!!?という記事を見つけた。

日経Linux2013-3月号の特集中に「既存のドライバを類似機器に適用できる」というサブタイトル。
気になって読んでみると

Linuxカーネル2.6以降で、ダイナミックデバイスIDという仕組みに対応したことによりカーネルモジュールのソースコードを書き換えずに情報を登録する事ができるようになった。これにより、ちょっとしたコマンでできるようになる・・・、そんな感じのことが書いてあった。

なんですと!!
あのカーネル再構築に費やした時間は何だったのだ!
これはぜひ試してみよう!!
というわけで、再度OS(Debian)の再インストール(← 完全に馬鹿です。費やした時間が・・・云々言ってるくせに、再インストールとか(^ ^;))

- 環境 -
 Debian(Wheezy)
 LAN-W300N/U2S(Logitec)



1. ドライバの準備&メーカID/プロダクトIDの確認
前回の記事のドライバダウンロード、メーカID/プロダクトID確認参照
 
もし、動いているUbuntuがあるならば"/lib/firmware/rt2800usb.bin"というものがあるのでこれをどうにかDebianの"/lib/firmware/"配下にコピーすればOK。
 

2. コマンドの入力
続いて、ターミナルから以下のコマンドを実行する。
※rootになっておいてください

# modprobe rt2800usb
# echo 0789 0169 > /sys/bus/usb/drivers/rt2800usb/new_id


これを実行した後再度無線モジュールを挿し直して、dmesgで確認すると・・・

wlan0が認識してるやん!!やだ、簡単(時間がかからない)!

意気揚々と再起動してみると・・・
認識されませんでした(笑)
※ちなみに2のコマンド再度実施すればできます。



で、再度記事を読んでみると、下の方に何やらコマンドのようなものが書いてある。
・・・が、これをどうすればいいのかがわからない。
これを元にネットを調べた結果、どうやらこのコマンドのようなものはおそらくファイルとして記述する
ものらしい。
日経LinuxさんドSか!この記事だけ見ても完全には出来ませんでした(爆笑)初心者殺しめ・・・。
読み足りないのか、読解力がないのか、はたまた愛の鞭か!?

こちらのサイトを参考にさせていただきました。

1./etc/modprobe.d配下に好きな名前で下のファイルを作成

#vim /etc/modprobe.d/logitec-usbwlan.conf
内容は次の通り
alias usb:v0789p0169d:dc*dsc*dp*ic*isc*ip* rt2800usb
install rt2800usb /sbin/modprobe --ignore-install rt2800usb $CMDLINE_OPT && /bin/echo "0789 0169" > /sys/bus/usb/drivers/rt2800usb/new_id



2./etc/modulesの最下行に以下を追加

rt2800usb


3.ドライバをインストール

上の「ドライバを準備」参照


4.再起動

できました!!
前回のカーネル再構築に比べるとはるかにスピーディーにできます。

上記modprobe.d、modules、上記コマンドの理解はちょっと怪しげなのでとりあえず、できましたとだけ。



テーマ : UNIX/Linux
ジャンル : コンピュータ

Debian-WheezyでUSB 無線LANアダプタを使う

Debianでの無線LANに挑戦! -カーネル再構築編-


※追記があります。(2013/4/1)


家に転がっていた古いノートPC(700MHz,370M程度のメモリ)にDebian(Wheezy)を入れてみた。
実はいろいろあったが、まぁここまでは問題なし。


で、ノートのメリットを活かすべく無線接続をしようとしたところ、利用した無線カードはWPA/WPA2に対応していなくWEPのみという事がわかった。うちのBuffalo製無線ルータでは、WEP接続だけ保護(排除)する機能があり「インターネットアクセスはできるがその他のPC等のと通信はさせない」という事ができる。
このノートPCの用途として考えられるのはWebとその他のPCへのリモートアクセス。
よって後者の用途でWEPだと困る。何より、今更簡単に突破できるWEPを使うのもどうかしてる(笑)

-環境-
 ・Debian-Wheezy
 ・Logitec製LAN-W300N/U2S



という事で、USB の無線アダプタ(Logitec製LAN-W300N/U2S)を購入。
早速Ubuntuに刺してみる。

$dmesg
[871599.896925] usb 1-1.2: new high-speed USB device number 16 using ehci_hcd
[871600.084712] usb 1-1.2: reset high-speed USB device number 16 using ehci_hcd
中略
[871600.210368] Registered led device: rt2800usb-phy5::radio
[871600.210438] Registered led device: rt2800usb-phy5::assoc
[871600.210498] Registered led device: rt2800usb-phy5::quality
[871600.259350] ADDRCONF(NETDEV_UP): wlan1: link is not ready

となって、wlan1として認識されている。
ifconfigを実行してもwlan1が表示されて後は無線の設定をすれば使えそう。

よしよし!Linuxすげーと思いつつ、Debianに挿したら行かないわけですよ(笑)Ubuntu便利なんだなぁ。
さてどうしたものかと思ってGoogle先生に聞いてみる。何やら難しそうな「カーネルの再構築」というキーワードがたくさん・・・。
まぢか、そんな難しい話なのか!?初心者として避けてきたカーネルのお話。。。
とはいえ、買っちゃったUSB無線アダプタ無駄にするわけにも行かないので日経Linxu(2012/12月号)のカーネルアップデートの記事を参考にやってみた。


0.事前確認

・ベンダーIDとプロダクトIDを調べる
USB 無線アダプタを挿した状態でlsusbを実行し、赤字の部分をメモしておく。
$ lsusb
Bus 001 Device 016: ID 0789:0169 Logitec Corp.

・チップの情報をネットで調べる
本製品はRalink社のRT2870というものを使っているらしい。


1.カーネルの再構築 必要なアプリのインストール
  
必要なアプリのインストールとファイルの解凍などを行う。
$ sudo apt-get -y update
$ sudo apt-get -y install build-essential fakeroot kernel-package
$ sudo apt-get -y install libncurses-dev
$ sudo apt-get -y install linux-source-3.2
$ mkdir ~/tmp
$ cd ~/tmp
$ sudo bunzip2 linux-source-3.2.tar.bz2
$ tar xvf /usr/src/linux-source-3.2.tar linux-source-3.2/
$ cd linux-source-3.2




2.カーネルで必要なモジュールの選択

"make menuconfig"コマンドを実行すると、ちょっとだけグラフィカルなメニュー形式の選択画面が表示されるので

"DeviceDrivers → NetworkingDeviceSupport → Wireless LAN → Ralink driver Support"の順にたどり
rt2800usb - Include support for unknown (USB) devices
を選択し「Y」を押す。
あとは、Exitを続けて最後に保存する書き換えるので保存する。



3.ファイルの確認

/tmp/linux-source-3.2/drivers/net/wireless/rt2x00/rt2800usb.cの中身を確認する。
重要なのはさっき調べたメーカIDとプロダクトIDが乗っていること。

#ifdef CONFIG_RT2800USB_UNKNOWN
(中略)
/* Logitec */
{ USB_DEVICE(0x0789, 0x0168) },
{ USB_DEVICE(0x0789, 0x0169) },
{USB_DEVICE(0x0789,0x016b)}, /* Logitec LAN-W450AN/U2 */
{USB_DEVICE(0x0789,0x0170)}, /* Logitec LAN-W300AN/U2 */




4.カーネルのビルド


CONCURRENCY_LEVEL=4 make-kpkg --rootcmd fakeroot --initrd linux_image

CPUが非力なためめちゃめちゃ時間がかかります。。。



5.再構築したカーネルのインストール

一つ上のディレクトリに.deb形式のファイルができるので、これをインストール。
$ sudo dpkg -i linux-image-3.2.39_3.2.39-10.00.Custom_i386.deb




6.ドライバのダウンロード

このサイトからドライバをダウンロードしてくる。
”2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2”というファイルだった。

これを解凍し、そのフォルダの中の"common"フォルダ内にある、"rt2870.bin"を/lib/firmware配下にコピー
$ tar xvf 2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2
$ sudo cp 2010_0709_RT2870_Linux_STA_v2.4.0.1/common/rt2870.bin /lib/firmware



7.再起動


再起動後、確認。
$ demsg
56.324055] usb 1-1: new high-speed USB device number 4 using ehci_hcd
[ 56.473555] usb 1-1: New USB device found, idVendor=0789, idProduct=0169
[ 56.473563] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 56.473568] usb 1-1: Product: 802.11 n WLAN
[ 56.473573] usb 1-1: Manufacturer: Ralink
[ 56.473576] usb 1-1: SerialNumber: 1.0
[ 56.588052] usb 1-1: reset high-speed USB device number 4 using ehci_hcd
[ 56.746189] ieee80211 phy1: Selected rate control algorithm 'minstrel_ht'
[ 56.747038] Registered led device: rt2800usb-phy1::radio
[ 56.747088] Registered led device: rt2800usb-phy1::assoc
[ 56.747139] Registered led device: rt2800usb-phy1::quality
[ 56.779309] rt2800usb 1-1:1.0: firmware: agent loaded rt2870.bin into memory
[ 57.061184] ADDRCONF(NETDEV_UP): wlan0: link is not ready


ifconfigでも正しく"wlan0"と認識されている。
良かったこれでアダプタが無駄にならずにすみました♪

実は、ここまで来るのに結構かかりました(汗
まぁ、カーネルの再構築という経験ができたのは良かったです。



続きを読む

dfとduをいつも混同するよ

Linuxコマンド df/du について


どうでもいい独り言です。


ファイル・ディレクトリの使用量確認とか、ディスクの空き容量とかに使うコマンドとして
dfコマンドとduコマンドがあるが、いまいちよくわかってなく使っていたのでちょっと整理してみた。

そもそもコマンド名も似ていてどっちがどっちなのかよくわかりづらい。
なので、そもそも何を意味する英語からきているのか調べてみた。


manでそれぞれ見ると

- df -
NAME
df - report file system disk space usage

- du -
NAME
du - estimate file space usage


どちらにも、File、Usageというキーワドが入っているのでちょっとわからない・・・。


WikiPediaによると

df
df (abbreviation for disk free)


du
du (abbreviated from disk usage)

という事らしい。

・df -> ディスク空き容量
・du -> ディスク使用量

といったところですかね。
って、それってそれぞれ反対だけど、ある意味同じなんじゃ・・・?



ともかく

 df:ディスクの空き容量(Free)を調べる
 du: ディスク上でファイルが利用している(Usage)容量を調べる



と覚えることにした。
とここまで書いて思った。ん、調査不足かな?
世の中にはもっと正しいこと書いてあるサイトあるかも(笑)

duコマンドに関してはこちらのサイトが大変参考になりました。

プロフィール

Author:Opecha-DaDa
メモ的なブログですが、あなたのお役に立てる内容があれば幸いです。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR