SyntaxHighlighterを使ってみる [雑記]
ソースコードをみやすくするために,SyntaxHighlighterを使ってみる.
こんな感じ.
参考サイト
ブログでソースコードを読みやすく表示する―シンタックスハイライターSyntaxHighlighter:ウェブノート:So-netブログ
blog でコードのシンタックスハイライトする方法:出遅れエンジニアの備忘録:So-netブログ
#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; }
こんな感じ.
参考サイト
ブログでソースコードを読みやすく表示する―シンタックスハイライターSyntaxHighlighter:ウェブノート:So-netブログ
blog でコードのシンタックスハイライトする方法:出遅れエンジニアの備忘録:So-netブログ
ArduinoでCMOSカメラを動かしてみる [Arduino]
前回から,ずいぶんと時間が経ってしまったが,ArduinoとCMOSカメラを接続して動かす続きをやってみる.
前回は,I2C(SCCB)で通信するところで終わっていたが,今回は画像の取得をやってみる.CMOSカメラで撮影した画像データをFIFOに保存し,その保存されたデータを読み出してみる.
というわけで,まずはArduinoとCMOSカメラを接続するわけだが,前回と同様の問題にぶち当たる.Aruduinoは5Vで動いていて,CMOSカメラのFIFOは3.3V,ov7670は2.8Vで動いてて,電圧が違う.直結していいかどうか確認が必要だ.
で,データシートを調べてみた.
今回のCMOSカメラで使われているFIFOは,AL422というデバイスで,AL422へのIO入力は5.5VまでOKのようだ(3.3V駆動時).なので,ArduinoからFIFOへ出力する場合の接続は直結でも問題ない.
また,Arduinoからov7670へ出力するような接続は,前回のI2C以外では使わないので気にしなくていい.
逆にCMOSカメラ,すなわちFIFO,もしくはov7670の出力をArduinoで受ける場合だと,2.8Vもしくは3.3V出力を5Vで受けるので,High/Loが正しく検出できない.実力的には問題が出ないかもしれないが仕様上はアウトだ.
というわけで,Arduino-->CMOSカメラは気にせず直結,CMOSカメラ-->Arduinoはレベル変換ICを間に挟むことにする.
今回使用するレベル変換ICは,秋月電子通商の「8ビット双方向ロジックレベル変換モジュール」だ.これを2個使用した.
では,回路図を示そう.前回同様,fritzingで書いてみた.
で,実際接続してみたのがこちら
配線数が多いのでさすがにごちゃごちゃしてる...
とりあえずこれで接続は完了.
あとはスケッチの作成だが,それはまた次回.
前回は,I2C(SCCB)で通信するところで終わっていたが,今回は画像の取得をやってみる.CMOSカメラで撮影した画像データをFIFOに保存し,その保存されたデータを読み出してみる.
というわけで,まずはArduinoとCMOSカメラを接続するわけだが,前回と同様の問題にぶち当たる.Aruduinoは5Vで動いていて,CMOSカメラのFIFOは3.3V,ov7670は2.8Vで動いてて,電圧が違う.直結していいかどうか確認が必要だ.
で,データシートを調べてみた.
今回のCMOSカメラで使われているFIFOは,AL422というデバイスで,AL422へのIO入力は5.5VまでOKのようだ(3.3V駆動時).なので,ArduinoからFIFOへ出力する場合の接続は直結でも問題ない.
また,Arduinoからov7670へ出力するような接続は,前回のI2C以外では使わないので気にしなくていい.
逆にCMOSカメラ,すなわちFIFO,もしくはov7670の出力をArduinoで受ける場合だと,2.8Vもしくは3.3V出力を5Vで受けるので,High/Loが正しく検出できない.実力的には問題が出ないかもしれないが仕様上はアウトだ.
というわけで,Arduino-->CMOSカメラは気にせず直結,CMOSカメラ-->Arduinoはレベル変換ICを間に挟むことにする.
今回使用するレベル変換ICは,秋月電子通商の「8ビット双方向ロジックレベル変換モジュール」だ.これを2個使用した.
では,回路図を示そう.前回同様,fritzingで書いてみた.
で,実際接続してみたのがこちら
配線数が多いのでさすがにごちゃごちゃしてる...
とりあえずこれで接続は完了.
あとはスケッチの作成だが,それはまた次回.
ArduinoでCMOSカメラと通信してみる [Arduino]
前回,ArduinoとCMOSカメラを接続しようと思ったのだが,電圧があわなくて接続できず動作させるとことができなかった.
というわけで,レベル変換ICだが,今回は,秋月電子通商の「I2Cバス用双方向電圧レベル変換モジュール(PCA9306)」を購入してみた.
で,こいつの電源だが,Aruduino側は5VなのでArduino側からもらってくればいいんだけど,OV7670側のI2C(厳密にはSCCB)は2.8Vだ.2.8VなんてArduino側にはない.
どうしようか迷ったが,CMOSカメラモジュール内で2.8Vを作ってるので,そこから引き出すことにした.回路図と,CMOSカメラモジュールを見比べながら,2.8Vが引き出せそうなところを探した.
で,下の写真はレンズを外したCMOSカメラモジュールで,赤矢印のところから2.8Vが引き出せる.ここに線材を半田づけして引き出した.
ここまでくれば,あとはCMOSカメラとArduinoを接続するだけだ.とりあえず通信できるかどうか確認するために,I2C(SCCB)に必要なところだけつないでみる.
回路図をfritzingで書いてみた.使いこなせてない&回路図書くことなんて滅多にないので,図が微妙かもしれないが.
で,つないでみた.
あとは,実際に通信してみるのだが,スケッチは,トランジスタ技術SPECIALの「カメラ・モジュールの動かし方と応用製作」にのってるのを使わせてもらった.詳細は本を参照してくださいな.
で,とりあえず,OV7670のレジスタマップを見ながらアドレス0AのProduct IDを読み出してみたら,ちゃんと76が返ってきた.ほかにもレジスタを読み出してみたが,どうやら通信はうまくできているようだ.
よし,次は,画像の取得だ.
ちなみに,画像データはFIFOモジュールと通信することになるのだが,こっちはFIFOの電源電圧が3.3Vだ.ここでもまたレベル変換ICが必要になる.
これについてはまた次回.
というわけで,レベル変換ICだが,今回は,秋月電子通商の「I2Cバス用双方向電圧レベル変換モジュール(PCA9306)」を購入してみた.
で,こいつの電源だが,Aruduino側は5VなのでArduino側からもらってくればいいんだけど,OV7670側のI2C(厳密にはSCCB)は2.8Vだ.2.8VなんてArduino側にはない.
どうしようか迷ったが,CMOSカメラモジュール内で2.8Vを作ってるので,そこから引き出すことにした.回路図と,CMOSカメラモジュールを見比べながら,2.8Vが引き出せそうなところを探した.
で,下の写真はレンズを外したCMOSカメラモジュールで,赤矢印のところから2.8Vが引き出せる.ここに線材を半田づけして引き出した.
ここまでくれば,あとはCMOSカメラとArduinoを接続するだけだ.とりあえず通信できるかどうか確認するために,I2C(SCCB)に必要なところだけつないでみる.
回路図をfritzingで書いてみた.使いこなせてない&回路図書くことなんて滅多にないので,図が微妙かもしれないが.
で,つないでみた.
あとは,実際に通信してみるのだが,スケッチは,トランジスタ技術SPECIALの「カメラ・モジュールの動かし方と応用製作」にのってるのを使わせてもらった.詳細は本を参照してくださいな.
で,とりあえず,OV7670のレジスタマップを見ながらアドレス0AのProduct IDを読み出してみたら,ちゃんと76が返ってきた.ほかにもレジスタを読み出してみたが,どうやら通信はうまくできているようだ.
よし,次は,画像の取得だ.
ちなみに,画像データはFIFOモジュールと通信することになるのだが,こっちはFIFOの電源電圧が3.3Vだ.ここでもまたレベル変換ICが必要になる.
これについてはまた次回.
ArduinoにCMOSカメラをつないでみる [Arduino]
Arduinoで何か作ってみようといろいろ調べてるときに,トランジスタ技術SPECIALの「カメラ・モジュールの動かし方と応用製作」ってのを見つけた.
この本の中には,ArduinoとCMOSカメラをつないで動かす記事も含まれてる.以前から,一度カメラを動かすのってやってみたかったので,さっそくこの本を購入.ちなみに,この本はトランジスタ技術2012年3月号特集記事「始めよう! チョコっとカメラ」の再編集版だ.
で,何しろCMOSカメラがないと話が始まらない.この本では,OmniVision Technologies社製のイメージセンサ「OV7670」を使ったカメラモジュールが紹介されてる.カメラモジュールは2種類あって,FIFOなしとFIFO付きのがあるが,今回はFIFO付きを使ってみることにした.
買ったのは,「OV7670+FIFOカメラモジュール(SCCBインタフェース)」.2980円也.ちなみに,「始めよう! チョコっとカメラ」の特集があったときは1980円で購入できたようだ.
というわけで,本を参考に,いざ接続!となるわけだが,よくよく見ると,単に直結というわけにはいかないようだ.
まずはCMOSカメラと通信したい.通信のインターフェースはSCCB(Serial Camera Control Bus)というやつでI2C互換なので,ArduinoのWireライブラリを使えばいい.なのでソフト的には全然問題ないのだが,ハード的には困ったことに電圧が合わない.
Arduinoのピンは5V系で動いていて,I2Cで使うピンも当然5Vで動いてる.だけどカメラモジュールの電源は3.3Vだし,I2C(厳密にはSCCB)の接続先であるOV7670は2.8Vで動いてる.念のため仕様書を確認してみたけど,さすがにアウトだ.
というわけで,すぐには試せない.とりあえずレベル変換ICを買うか...
つづく.
トランジスタ技術 SPECIAL (スペシャル) 2013年 10月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2013/09/28
- メディア: 雑誌
この本の中には,ArduinoとCMOSカメラをつないで動かす記事も含まれてる.以前から,一度カメラを動かすのってやってみたかったので,さっそくこの本を購入.ちなみに,この本はトランジスタ技術2012年3月号特集記事「始めよう! チョコっとカメラ」の再編集版だ.
で,何しろCMOSカメラがないと話が始まらない.この本では,OmniVision Technologies社製のイメージセンサ「OV7670」を使ったカメラモジュールが紹介されてる.カメラモジュールは2種類あって,FIFOなしとFIFO付きのがあるが,今回はFIFO付きを使ってみることにした.
買ったのは,「OV7670+FIFOカメラモジュール(SCCBインタフェース)」.2980円也.ちなみに,「始めよう! チョコっとカメラ」の特集があったときは1980円で購入できたようだ.
というわけで,本を参考に,いざ接続!となるわけだが,よくよく見ると,単に直結というわけにはいかないようだ.
まずはCMOSカメラと通信したい.通信のインターフェースはSCCB(Serial Camera Control Bus)というやつでI2C互換なので,ArduinoのWireライブラリを使えばいい.なのでソフト的には全然問題ないのだが,ハード的には困ったことに電圧が合わない.
Arduinoのピンは5V系で動いていて,I2Cで使うピンも当然5Vで動いてる.だけどカメラモジュールの電源は3.3Vだし,I2C(厳密にはSCCB)の接続先であるOV7670は2.8Vで動いてる.念のため仕様書を確認してみたけど,さすがにアウトだ.
というわけで,すぐには試せない.とりあえずレベル変換ICを買うか...
つづく.
Arduinoをはじめてみる [Arduino]
ふと思い立って,Arduinoをはじめてみる.
というわけで,定番らしき,
を買ってみた.
こういうのは本だけ買っても楽しくない.キットも買って,いろいろ試してみるのがおすすめ.
一通り試してみたけど,素直に楽しい.そして簡単.
スケッチ(Arduinoではプログラムをスケッチと呼ぶ)は最小限の記述ですむように環境がいろいろラップしてくれてるので,マイコンの初期化処理とかを書かなくてもいい.あと開発はArduino言語という言語だがC言語が分かれば,だいたい理解できる.
BeagleBoardやRaspberry Piよりも,マイコンにすごく近いところをいじる感じ.
キットにはArduino Uno R3というマイコンボードが付いてくるけど,こいつはBeagleBoardやRaspberry PiみたいにLinuxが走る訳でもないし,Ethernetも付いてないし,そもそもクロックは16MHzだし,スペックだけ見るとなんだか寂しく感じるかもしれないけど,このシンプルさがまたいい.
電子工作に興味がある人は絶対楽しいと思う.
お試しあれ.
というわけで,定番らしき,
Arduinoをはじめよう 第2版 (Make:PROJECTS)
- 作者: Massimo Banzi
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/03/16
- メディア: 単行本(ソフトカバー)
を買ってみた.
こういうのは本だけ買っても楽しくない.キットも買って,いろいろ試してみるのがおすすめ.
一通り試してみたけど,素直に楽しい.そして簡単.
スケッチ(Arduinoではプログラムをスケッチと呼ぶ)は最小限の記述ですむように環境がいろいろラップしてくれてるので,マイコンの初期化処理とかを書かなくてもいい.あと開発はArduino言語という言語だがC言語が分かれば,だいたい理解できる.
BeagleBoardやRaspberry Piよりも,マイコンにすごく近いところをいじる感じ.
キットにはArduino Uno R3というマイコンボードが付いてくるけど,こいつはBeagleBoardやRaspberry PiみたいにLinuxが走る訳でもないし,Ethernetも付いてないし,そもそもクロックは16MHzだし,スペックだけ見るとなんだか寂しく感じるかもしれないけど,このシンプルさがまたいい.
電子工作に興味がある人は絶対楽しいと思う.
お試しあれ.
BeagleBoard-xMをVPNサーバにしてみる [beagleboard]
BeagleBoard-xMにはUbuntu 12.04をインストールして,USB WiFiを使えるようにした.
今回はこれをVPNサーバにしてみる.
プロトコルはPPTPが簡単らしいのだが,docomoのSPモードだと使えないのでL2TP/IPsecを使うことにする.あと,IPsecは事前共有鍵認証を使うことにする.
ではまず必要なパッケージとして,openswanとxl2tpdをインストールしてやる.
最初にopenswanのインストールだが,androidのICSにはバグがあってIPsecがつながらない.ただ,回避策はあって,openswanのソースにパッチを当ててビルドしてやればいい.
では,ソースとパッチのダウンロード.
ダウンロードしたら展開.
ビルドに必要なツールをインストール.
そしたらパッチをあててビルド,インストールしてやる.
ちなみに,Openswanの最新バージョンは,2.6.39のようだ.2.6.39ならパッチは必要ないかもしれないが確認していないので分からない.
では,次にxl2tpdをインストール.
こちらは単純に,
でOK.
そしたら,設定開始.
まずはカーネルパラメータの設定.
以下を追記
そしたら設定値の反映.
次にopenswanの設定.
元々ある記述のうち,config setupのprotostack=netkeyに変更するのと,conn ***以下を追記してやる.ファイル全体を示すと以下のようになる.
ちなみに,「left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。」の部分はあくまで例なので,自分のサーバのIPアドレスを設定してやる.
IPsecの事前共有鍵(pre-shared key)の設定.
ファイルがない場合は作成してやる.で,以下を追記してやる.
ここで,先頭のIPアドレスは上記で設定した自分のサーバのIPアドレスだ.また,hogehogeが事前共有鍵になる.なのでファイルのアクセス権を変更しておく.
ここまでできたら,IPsecを再起動.
設定の確認をしてみる.
N/A, WARNINGとDISABLEDは気にしなくていいらしいが,FAILEDが出るとNGだ.だが,openswanをソースからビルドすると,「Two or more interfaces found, checking IP forwarding」の部分がFAILEDと出ることがあるようだが気にしなくていいらしい.
次にxl2tpdの設定.
以下を追記してやる.
ここで,ip rangeはVPN接続してきたクライアントに割り当てるIPアドレスの範囲で,local ipは自分のサーバのIPアドレスだ.これもあくまで例なので,自分の環境にあわせて設定してやる.
pppの設定.
ファイルが無いので新規作成し以下を記入する.コメントがあるとうまく動かないようなので削除すべし.
chap認証設定.
以下を追記
ここで,hogehogeはUserName, fugafugaはパスワードになる.
ここで,いったんxl2tpdの再起動.
ファイヤーウォールでUDP/500とUDP/4500を通すように設定.
ESP を通すための設定と,xl2tpd を IPsec 以外から使えないようにする設定と,LAN の NAT をさせる設定とを適切な場所に追加.
*filter に対応する COMMIT の手前に(COMMITの直前に)以下を記載.
次に*filter の COMMIT の後に以下を記載.
フォワーディングはデフォルト許可に設定.
以下の設定に変更.
ufwを有効化.
IPsec自動起動設定.
あとは,ルーターの設定として,UDP/500とUDP/4500を自分のサーバに転送するように設定してやればOK.
これで完了.
お疲れさまでした.
参考サイト
いっぱいあるけど,特に参考にしたのは以下のサイトです.
Debian GNU/Linux で L2TP / IPsec を使用する VPN サーバを設定する (サーバ側で NAPT しない場合) – Open the Next
○○的な気まぐれ日記 » Androidから自宅サーバー(ubuntu12.04)にアクセスする
VPNでandroidと自宅LANがつながった | 人生崖っぷち
先人に感謝します.
今回はこれをVPNサーバにしてみる.
プロトコルはPPTPが簡単らしいのだが,docomoのSPモードだと使えないのでL2TP/IPsecを使うことにする.あと,IPsecは事前共有鍵認証を使うことにする.
ではまず必要なパッケージとして,openswanとxl2tpdをインストールしてやる.
最初にopenswanのインストールだが,androidのICSにはバグがあってIPsecがつながらない.ただ,回避策はあって,openswanのソースにパッチを当ててビルドしてやればいい.
では,ソースとパッチのダウンロード.
wget http://download.openswan.org/openswan/openswan-2.6.38.tar.gz
wget http://people.redhat.com/pwouters/osw/openswan-2.6.38-android-ics-natoa.patch
ダウンロードしたら展開.
tar -xzvf openswan-2.6.38.tar.gz
ビルドに必要なツールをインストール.
sudo apt-get install build-essential libgmp3-dev gawk flex bison
そしたらパッチをあててビルド,インストールしてやる.
cd openswan-2.6.38/
patch -p1 < ../openswan-2.6.38-android-ics-natoa.patch
sudo make ARCH=arm programs
sudo make ARCH=arm install
ちなみに,Openswanの最新バージョンは,2.6.39のようだ.2.6.39ならパッチは必要ないかもしれないが確認していないので分からない.
では,次にxl2tpdをインストール.
こちらは単純に,
sudo apt-get install xl2tpd
でOK.
そしたら,設定開始.
まずはカーネルパラメータの設定.
sudo vi /etc/sysctl.conf
以下を追記
###################################################################
# add settings
###################################################################
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.wlan0.send_redirects = 0
net.ipv4.conf.wlan0.accept_redirects = 0
そしたら設定値の反映.
sudo sysctl -p
次にopenswanの設定.
sudo vi /etc/ipsec.conf
元々ある記述のうち,config setupのprotostack=netkeyに変更するのと,conn ***以下を追記してやる.ファイル全体を示すと以下のようになる.
# /etc/ipsec.conf - Openswan IPsec configuration file
# This file: /usr/share/doc/openswan/ipsec.conf-sample
#
# Manual: ipsec.conf.5
version 2.0 # conforms to second version of ipsec.conf specification
# basic configuration
config setup
# Do not set debug options to debug configuration issues!
# plutodebug / klipsdebug = "all", "none" or a combation from below:
# "raw crypt parsing emitting control klips pfkey natt x509 dpd private"
# eg:
# plutodebug="control parsing"
# Again: only enable plutodebug or klipsdebug when asked by a developer
#
# enable to get logs per-peer
# plutoopts="--perpeerlog"
#
# Enable core dumps (might require system changes, like ulimit -C)
# This is required for abrtd to work properly
# Note: incorrect SElinux policies might prevent pluto writing the core
dumpdir=/var/run/pluto/
#
# NAT-TRAVERSAL support, see README.NAT-Traversal
nat_traversal=yes
# exclude networks used on server side by adding %v4:!a.b.c.0/24
# It seems that T-Mobile in the US and Rogers/Fido in Canada are
# using 25/8 as "private" address space on their 3G network.
# This range has not been announced via BGP (at least upto 2010-12-21)
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
# OE is now off by default. Uncomment and change to on, to enable.
oe=off
# which IPsec stack to use. auto will try netkey, then klips then mast
# protostack=auto
protostack=netkey
# Use this to log to a file, or disable logging on embedded systems (like openwrt)
#plutostderrlog=/dev/null
# Add connections here
# sample VPN connection
# for more examples, see /etc/ipsec.d/examples/
#conn sample
# # Left security gateway, subnet behind it, nexthop toward right.
# left=10.0.0.1
# leftsubnet=172.16.0.0/24
# leftnexthop=10.22.33.44
# # Right security gateway, subnet behind it, nexthop toward left.
# right=10.12.12.1
# rightsubnet=192.168.0.0/24
# rightnexthop=10.101.102.103
# # To authorize this connection, but not actually start it,
# # at startup, uncomment this.
# #auto=add
conn L2TP-PSK-NAT
rightsubnet=0.0.0.0/0
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
forceencaps=yes
authby=secret
pfs=no
auto=add
keyingtries=3
ike=aes-sha1;modp3072 # ike phase1 の設定 (暗号化アルゴリズムは AES 、ハッシュアルゴリズムは SHA1 、Diffie-Hellman グループは 15 (3,072bit))
phase2=esp # ike phase2 の設定 (セキュリティプロトコルは ESP)
phase2alg=aes-sha1;modp3072 # ike phase2 の設定 (暗号化アルゴリズムは AES 、ハッシュアルゴリズムは SHA1 、Diffie-Hellman グループは 15 (3,072bit))
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
# 以下は iOS クライアント向けの設定。
dpddelay=40
dpdtimeout=130
dpdaction=clear
ちなみに,「left=10.0.1.100 # 自サーバの IPv4 アドレスを設定する。」の部分はあくまで例なので,自分のサーバのIPアドレスを設定してやる.
IPsecの事前共有鍵(pre-shared key)の設定.
sudo vi /etc/ipsec.secrets
ファイルがない場合は作成してやる.で,以下を追記してやる.
10.0.1.100 %any: PSK "hogehoge"
ここで,先頭のIPアドレスは上記で設定した自分のサーバのIPアドレスだ.また,hogehogeが事前共有鍵になる.なのでファイルのアクセス権を変更しておく.
sudo chmod 600 /etc/ipsec.secrets
ここまでできたら,IPsecを再起動.
sudo /etc/init.d/ipsec restart
設定の確認をしてみる.
sudo ipsec verify
N/A, WARNINGとDISABLEDは気にしなくていいらしいが,FAILEDが出るとNGだ.だが,openswanをソースからビルドすると,「Two or more interfaces found, checking IP forwarding」の部分がFAILEDと出ることがあるようだが気にしなくていいらしい.
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.37/K3.2.0-51-omap (netkey)
Checking for IPsec support in kernel [OK]
SAref kernel support [N/A]
NETKEY: Testing XFRM related proc values [OK]
[OK]
[OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Two or more interfaces found, checking IP forwarding [OK] <--- FAILEDと出るかも
Checking NAT and MASQUERADEing [OK]
Checking for 'ip' command [OK]
Checking /bin/sh is not /bin/dash [WARNING]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
次にxl2tpdの設定.
sudo vi /etc/xl2tpd/xl2tpd.conf
以下を追記してやる.
[global]
[lns default]
ip range = 10.0.1.201 - 10.0.1.210
local ip = 10.0.1.100
length bit = yes
refuse chap = yes
require authentication = yes
name = l2tp
pppoptfile = /etc/ppp/l2tpd-options
ここで,ip rangeはVPN接続してきたクライアントに割り当てるIPアドレスの範囲で,local ipは自分のサーバのIPアドレスだ.これもあくまで例なので,自分の環境にあわせて設定してやる.
pppの設定.
sudo vi /etc/ppp/l2tpd-options
ファイルが無いので新規作成し以下を記入する.コメントがあるとうまく動かないようなので削除すべし.
name l2tp # /etc/xl2tpd/xl2tpd.conf で設定した name と合わせる
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
ms-dns 10.0.1.1 # DNS サーバの IPv4 アドレス
proxyarp
nodefaultroute
lock
nobsdcomp
mtu 1280
mru 1280
chap認証設定.
sudo vi /etc/ppp/chap-secrets
以下を追記
hogehoge l2tp "fugafuga" *
ここで,hogehogeはUserName, fugafugaはパスワードになる.
ここで,いったんxl2tpdの再起動.
sudo /etc/init.d/xl2tpd restart
ファイヤーウォールでUDP/500とUDP/4500を通すように設定.
sudo ufw allow 500/udp
sudo ufw allow 4500/udp
ESP を通すための設定と,xl2tpd を IPsec 以外から使えないようにする設定と,LAN の NAT をさせる設定とを適切な場所に追加.
sudo vi /etc/ufw/before.rules
*filter に対応する COMMIT の手前に(COMMITの直前に)以下を記載.
# for ESP protocol of IPsec
-A INPUT -p 50 -j ACCEPT
# restricts l2tp to be used under ipsec
-A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport l2tp -j ACCEPT
-A INPUT -p udp -m udp --dport l2tp -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p udp -m policy --dir out --pol ipsec -m udp --sport l2tp -j ACCEPT
-A OUTPUT -p udp -m udp --sport l2tp -j REJECT --reject-with icmp-port-unreachable
次に*filter の COMMIT の後に以下を記載.
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from 192.168.222.0/24
-A POSTROUTING -s 10.0.1.0/24 -j MASQUERADE
# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
# end of nat rules
フォワーディングはデフォルト許可に設定.
sudo vi /etc/default/ufw
以下の設定に変更.
DEFAULT_FORWARD_POLICY="ACCEPT"
ufwを有効化.
sudo ufw enable
IPsec自動起動設定.
sudo update-rc.d ipsec start 90 2 3 4 5 . stop 1 0 1 6 .
あとは,ルーターの設定として,UDP/500とUDP/4500を自分のサーバに転送するように設定してやればOK.
これで完了.
お疲れさまでした.
参考サイト
いっぱいあるけど,特に参考にしたのは以下のサイトです.
Debian GNU/Linux で L2TP / IPsec を使用する VPN サーバを設定する (サーバ側で NAPT しない場合) – Open the Next
○○的な気まぐれ日記 » Androidから自宅サーバー(ubuntu12.04)にアクセスする
VPNでandroidと自宅LANがつながった | 人生崖っぷち
先人に感謝します.
ダイナミックDNSにieServerを使ってみる [雑記]
以前,ダイナミックDNSのサービスとして「Dynamic DO!.jp」を使った.その時は,無料でずっと使えたんだけど,7月ごろに規約が変わって,今はずっと無料ではなくなってしまった.無料で使い続ける方法もあるんだけど,その条件は,うちだと難しい...
というわけで,別のダイナミックDNSサービスを使ってみる.
いくつか比較して,今回は,ieServer.Netのサービスを使ってみる.もちろん無料だ.
使い方は,とても簡単.
新規ユーザー登録から,ユーザー名とか,希望するドメイン,あとメールアドレスとパスワードを登録する.ここで登録するユーザー名が,サブドメインとして使用されるようになる.
あとは,IPアドレスを自動更新するようにしてやれば,作業は完了.
自動更新のためのツール類は,ieServerで便利ツールとして紹介されている.うちはUbuntuなので,便利ツールのうち,「IPアドレス更新サンプルスクリプト」を利用させてもらうことにする.
では,具体的な作業だが,
まず,そのスクリプトをダウンロードする.
そしたら,/usr/local/下にddnsディレクトリを作って,そこにコピー.ファイル名はddns-update.plに変更しておく.
で,そのスクリプトに必要な情報を追記してやる.
具体的には,アカウント,ドメイン名,パスワードと,CURRENT_IP_FILE, LOG_FILEのパスを指定しておく.あと,$DDNS_UPDATEはhttpsアクセスにしておく.
念のためファイル全体を示しておこう.
そしたら,(パスワードが書かれてるので)アクセス権を変更して,
あとは,crontabで定期実行されるようにしておく.
これで完了.簡単だ.
なにより,無料で使えるieServer.Netに感謝.
というわけで,別のダイナミックDNSサービスを使ってみる.
いくつか比較して,今回は,ieServer.Netのサービスを使ってみる.もちろん無料だ.
使い方は,とても簡単.
新規ユーザー登録から,ユーザー名とか,希望するドメイン,あとメールアドレスとパスワードを登録する.ここで登録するユーザー名が,サブドメインとして使用されるようになる.
あとは,IPアドレスを自動更新するようにしてやれば,作業は完了.
自動更新のためのツール類は,ieServerで便利ツールとして紹介されている.うちはUbuntuなので,便利ツールのうち,「IPアドレス更新サンプルスクリプト」を利用させてもらうことにする.
では,具体的な作業だが,
まず,そのスクリプトをダウンロードする.
cd ~/ wget http://ieserver.net/ddns-update.txt
そしたら,/usr/local/下にddnsディレクトリを作って,そこにコピー.ファイル名はddns-update.plに変更しておく.
cd /usr/local sudo mkdir ddns sudo cp ~/ddns-update.txt /usr/local/ddns/ddns-update.pl
で,そのスクリプトに必要な情報を追記してやる.
sudo vi ddns-update.pl
具体的には,アカウント,ドメイン名,パスワードと,CURRENT_IP_FILE, LOG_FILEのパスを指定しておく.あと,$DDNS_UPDATEはhttpsアクセスにしておく.
念のためファイル全体を示しておこう.
#!/usr/bin/perl # ieServer.Net 専用 DDNS IP アドレス更新スクリプト - ddns-update.pl # 作成者:山本恭弘@Agora Inc. 作成日:2004/03/24 # # 回線割り当てグローバルIPアドレスを確認し、変化があれば新IPアドレスを # DDNSに登録。当コマンドを一定の間隔で実行し、IPアドレスの変化を監視& # 更新処理する。利用には perl wget cron が利用可能である必要あり。 # # 回線に割り当てられた IPアドレス は http://ieserver.net/ipcheck.shtml # へのアクセスによって確認。 # # cron にて当コマンドを等間隔で実行し、回線IPを確認。変化があればDDNSに # IPアドレスを登録。DDNSサーバーへの負荷軽減の点から実行間隔は10分以上と # すること。 # crontab設定例(/usr/local/ddns/ddns.plにスクリプトを置き10分間隔で実行) # 5,15,25,35,45,55 * * * * /usr/local/ddns/ddns-update.pl # 以下2ファイルの配置ディレクトリは好みに応じ設定 # 1. 設定IPアドレスワークファイル $CURRENT_IP_FILE = "/usr/local/ddns/current_ip"; # 2. 設定状況ログファイル $LOG_FILE = "/usr/local/ddns/ip_update.log"; # 回線IP確認ページURL $REMOTE_ADDR_CHK = "http://ieserver.net/ipcheck.shtml"; # DDNS更新ページURL # wgetをSSL接続可能でビルドしているなら、https:// での接続を推奨 $DDNS_UPDATE = "https://ieserver.net/cgi-bin/dip.cgi"; # ieServer.Netにて取得したアカウント(サブドメイン)情報を記入 $ACCOUNT = "ユーザー登録したユーザー名"; # アカウント(サブドメイン)名設定 $DOMAIN = "ユーザー登録で選択したドメイン名"; # ドメイン名設定 $PASSWORD = "ユーザー登録で設定したパスワード"; # パスワード設定 if(!open(FILE,"$CURRENT_IP_FILE")) { $CURRENT_IP = '0.0.0.0'; } else { $CURRENT_IP = <FILE>; close FILE; } $NEW_IP = '0.0.0.0'; $NEW_IP = `wget -q -O - $REMOTE_ADDR_CHK`; if ($NEW_IP ne "0.0.0.0" and $CURRENT_IP ne $NEW_IP) { $STATUS = `wget -q -O - '$DDNS_UPDATE?username=$ACCOUNT&domain=$DOMAIN&password=$PASSWORD&updatehost=1'`; if ($STATUS =~ m/$NEW_IP/) { open (FILE ,">$CURRENT_IP_FILE"); print FILE $NEW_IP; close FILE; $TIME = localtime; open (FILE ,">>$LOG_FILE"); print FILE "$TIME $ACCOUNT.$DOMAIN Updated $CURRENT_IP to $NEW_IP\n"; close FILE; } else { $TIME = localtime; open (FILE ,">>$LOG_FILE"); print FILE "$TIME $ACCOUNT.$DOMAIN Update aborted $CURRENT_IP to $NEW_IP\n"; close FILE; } } exit;
そしたら,(パスワードが書かれてるので)アクセス権を変更して,
sudo chmod 700 ddns-update.pl
あとは,crontabで定期実行されるようにしておく.
sudo crontab -e 3-58/5 * * * * /usr/local/ddns/ddns-update.pl
これで完了.簡単だ.
なにより,無料で使えるieServer.Netに感謝.
BeagleBoard-xMのUbuntuにUSB WiFiのドライバをインストールしてみる [beagleboard]
ずいぶんと前に,BeagleBoard-xMにUbuntu 12.04をインストールして,USB WiFiをつないでみた.
そのときのUSB WiFiは,PLANEXのGW-USValue-EZだ.残念ながらすでに終息製品扱いらしいが... まぁRealtek社のRTL8192CUを使ってるアダプタなら同じだと思うので参考になると思う.
で,以前,使ってみたときはUbuntuに標準で入ってるドライバで動かしてみたんだけど,いくつか気になる点があった.たとえば...
・GW-USValue-EZが恐ろしく熱くなる.
・青のLEDが点灯しっぱなしになってる.
・通信スピードが遅い気がする.
といったところだ.
で,調べたところ,どうやらRealtekのドライバを入れるといいらしいということが分かったのでインストールしてみる.
まずはドライバのダウンロード.ダウンロードはここからできる.
今だと,「RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip」がダウンロードできるようだ.
そしたら,展開して,展開したディレクトリ内にあるインストールスクリプトを実行すればいい.
が,実際はエラーが出てインストールできない.
で,調べてみたら,ここに対処方法が載ってた.kkAyatakaさんに感謝.その手順通りに作業をしてみる.
まずはカーネルのバージョンを確認.
どうやら3.2.0-51-omapらしい.
そしたら,対応バージョンのカーネルのヘッダをとってくる.
次にMakefileを修正する.
ここまでやったら再度インストール.
あとはUbuntu標準のドライバが読み込まれないように設定.
そしたらRebootしてやれば,これで完了.
で,そもそもの気になる点がどうなったかというと,
・GW-USValue-EZが恐ろしく熱くなる. ---> ほどほどに熱くなるぐらいになった.
・青のLEDが点灯しっぱなしになってる. ---> 点滅するようになった.
・通信スピードが遅い気がする. ---> んー,よくわからん.
といったところ.
まぁ,前よりはよくなったので良しとしよう.動作は特に問題なく安定しているようだ.
ただ,このインストール作業,カーネルのアップデートをすると再度やらないといけないので注意.
では,お試しあれ.
そのときのUSB WiFiは,PLANEXのGW-USValue-EZだ.残念ながらすでに終息製品扱いらしいが... まぁRealtek社のRTL8192CUを使ってるアダプタなら同じだと思うので参考になると思う.
で,以前,使ってみたときはUbuntuに標準で入ってるドライバで動かしてみたんだけど,いくつか気になる点があった.たとえば...
・GW-USValue-EZが恐ろしく熱くなる.
・青のLEDが点灯しっぱなしになってる.
・通信スピードが遅い気がする.
といったところだ.
で,調べたところ,どうやらRealtekのドライバを入れるといいらしいということが分かったのでインストールしてみる.
まずはドライバのダウンロード.ダウンロードはここからできる.
今だと,「RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip」がダウンロードできるようだ.
そしたら,展開して,展開したディレクトリ内にあるインストールスクリプトを実行すればいい.
$ unzip RTL8192xC_USB_linux_v3.4.4_4749.20121105.zip $ cd RTL8188C_8192C_USB_linux_v3.4.4_4749.20121105/ $ sudo sh ./install.sh
が,実際はエラーが出てインストールできない.
で,調べてみたら,ここに対処方法が載ってた.kkAyatakaさんに感謝.その手順通りに作業をしてみる.
まずはカーネルのバージョンを確認.
$ uname -a Linux hogehoge 3.2.0-51-omap #77-Ubuntu Thu Jul 25 00:39:05 UTC 2013 armv7l armv7l armv7l GNU/Linux
どうやら3.2.0-51-omapらしい.
そしたら,対応バージョンのカーネルのヘッダをとってくる.
$ sudo apt-get install linux-headers-3.2.0-51-omap
次にMakefileを修正する.
$ sudo vi /lib/modules/3.2.0-51-omap/build/Makefile 200行目ぐらいにあるSRCARCHを設定しているところにarmを追加してやる SRCARCH := $(ARCH) SRCARCH := arm
ここまでやったら再度インストール.
$ sudo sh ./install.sh
あとはUbuntu標準のドライバが読み込まれないように設定.
$ sudo vi /etc/modprobe.d/blacklist.conf 以下を追記してやる blacklist rtl8192cu
そしたらRebootしてやれば,これで完了.
で,そもそもの気になる点がどうなったかというと,
・GW-USValue-EZが恐ろしく熱くなる. ---> ほどほどに熱くなるぐらいになった.
・青のLEDが点灯しっぱなしになってる. ---> 点滅するようになった.
・通信スピードが遅い気がする. ---> んー,よくわからん.
といったところ.
まぁ,前よりはよくなったので良しとしよう.動作は特に問題なく安定しているようだ.
ただ,このインストール作業,カーネルのアップデートをすると再度やらないといけないので注意.
では,お試しあれ.
RaspbianにXBMCをインストールしてみる [Raspberry Pi]
以前,Raspberry Piをメディアセンターにするために,Raspbmcという専用ディストリビューションをインストールしてみた.これでXBMCが使える.
XBMCを使うだけなら,これで全然問題ないんだけど,Raspberry PiをXBMC専用で使うのももったいないので,(といっても使い道がいま決まってる訳ではないんだけど・・・)RaspbianにXBMCをインストールしてみることにする.
というわけで,RaspbianにXBMCをインストールする方法だ.
ここによると,プレビルド済みのパッケージを使う方法と,ソースからビルドする方法があるようだ.
説明を読むと,ソースからビルドする場合は,「they will take over 12 hours to compile on the Pi.」って書かれてて,12時間以上かかるとある.というわけで迷うことなくプレビルド済みパッケージを使うことにする.
プレビルド済みパッケージを使ったインストール方法の詳細は,ここに記載がある.なので,ここに書かれている通りに作業を進めればいい.
具体的には,次のようになる.
まず,パッケージのダウンロード先を追加.
そしたら,公開鍵の登録.
あとはパッケージリストを入手して,
インストール.
では,起動してみる.CUI上から,
としてやると,起動するはずだ.
このままだと,XBMCを起動するのに毎回コマンド入力が必要になる.なので,boot時にXBMCが自動起動するように設定してみる.設定は簡単で,/etc/default/xbmcファイル内のENABLED=0をENABLED=1に変更してやればいい.これで電源投入時に自動的にXBMCが起動するようになる.
ま,これで事実上XBMC専用になるわけで,当初目的と矛盾するのだが・・・.
で,しばらくいろいろ試していると,動画がうまく再生できないことに気がついた.
Raspbmcでは普通に再生できた動画が,Raspbian + XBMCで再生できない.
これにはかなり悩んだが,答えは,「RaspbianにXBMCを導入したときの設定まとめ - @slaypniのまとめも」にあって,ビデオメモリの割当がデフォルトの64MBだとダメということらしい.というわけで,raspi-configからビデオメモリの割当を128に変更.これで動画が再生できるようになった.slaypniさんに感謝.
あと,Idle時のCPU負荷が高い件についても対策が書かれてる.確認してみると確かに何もしてないときでもCPU負荷が高い・・・.というわけで,
Settings - System - Video output - Vertical blank syncをAlways enabled
にしておく.
ちなみにRaspbmcではデフォルトでAlways enabledとなっているようだ.
これで完了.お試しあれ.
XBMCを使うだけなら,これで全然問題ないんだけど,Raspberry PiをXBMC専用で使うのももったいないので,(といっても使い道がいま決まってる訳ではないんだけど・・・)RaspbianにXBMCをインストールしてみることにする.
というわけで,RaspbianにXBMCをインストールする方法だ.
ここによると,プレビルド済みのパッケージを使う方法と,ソースからビルドする方法があるようだ.
説明を読むと,ソースからビルドする場合は,「they will take over 12 hours to compile on the Pi.」って書かれてて,12時間以上かかるとある.というわけで迷うことなくプレビルド済みパッケージを使うことにする.
プレビルド済みパッケージを使ったインストール方法の詳細は,ここに記載がある.なので,ここに書かれている通りに作業を進めればいい.
具体的には,次のようになる.
まず,パッケージのダウンロード先を追加.
で,以下を書き込む$ sudo vi /etc/apt/sources.list.d/mene.list
deb http://archive.mene.za.net/raspbian wheezy contrib
そしたら,公開鍵の登録.
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key 5243CDED
あとはパッケージリストを入手して,
$ sudo apt-get update
インストール.
$ sudo apt-get install xbmc
では,起動してみる.CUI上から,
$ xbmc-standalone/code>
としてやると,起動するはずだ.
このままだと,XBMCを起動するのに毎回コマンド入力が必要になる.なので,boot時にXBMCが自動起動するように設定してみる.設定は簡単で,/etc/default/xbmcファイル内のENABLED=0をENABLED=1に変更してやればいい.これで電源投入時に自動的にXBMCが起動するようになる.
ま,これで事実上XBMC専用になるわけで,当初目的と矛盾するのだが・・・.
で,しばらくいろいろ試していると,動画がうまく再生できないことに気がついた.
Raspbmcでは普通に再生できた動画が,Raspbian + XBMCで再生できない.
これにはかなり悩んだが,答えは,「RaspbianにXBMCを導入したときの設定まとめ - @slaypniのまとめも」にあって,ビデオメモリの割当がデフォルトの64MBだとダメということらしい.というわけで,raspi-configからビデオメモリの割当を128に変更.これで動画が再生できるようになった.slaypniさんに感謝.
あと,Idle時のCPU負荷が高い件についても対策が書かれてる.確認してみると確かに何もしてないときでもCPU負荷が高い・・・.というわけで,
Settings - System - Video output - Vertical blank syncをAlways enabled
にしておく.
ちなみにRaspbmcではデフォルトでAlways enabledとなっているようだ.
これで完了.お試しあれ.
Raspbianにhostnameでアクセスできるようにしてみる [Raspberry Pi]
前回,Raspbianをインストールした.
で,SSHを使えるように設定したのだが,SSHで接続するときに,IPアドレスを知る必要がある.たとえば,
で,毎回IPアドレスを調べるのは面倒だ.
というわけで,hostnameでアクセスできるようにしてみる.
調べてみると,Avahiというのをインストールするといいらしい.詳細はWikipediaが詳しい.なので説明は省くが,これをインストールすると,
これで,IPアドレスを調べる必要はなくなる.
では,Avahiのインストール方法だが,特に難しいことはなく,
Macから接続するならこれでOK.
Windowsの場合,Windows側にもAvahiをインストールする必要があるらしい.けど,もしiTunesがインストールされてればBonjourがインストールされてるので,これでOK.BonjourとAvahiの関係は,まぁ調べてくださいな.
ちなみに,Raspbmcではもともとインストールされているようだ.だから,
では,お試しあれ.
で,SSHを使えるように設定したのだが,SSHで接続するときに,IPアドレスを知る必要がある.たとえば,
のようにしないといけない.ssh pi@<ip-address>
で,毎回IPアドレスを調べるのは面倒だ.
というわけで,hostnameでアクセスできるようにしてみる.
調べてみると,Avahiというのをインストールするといいらしい.詳細はWikipediaが詳しい.なので説明は省くが,これをインストールすると,
で接続できるようになる.ssh pi@<hostname>.local
これで,IPアドレスを調べる必要はなくなる.
では,Avahiのインストール方法だが,特に難しいことはなく,
でよい.$ sudo apt-get update $ sudo apt-get install avahi-daemon
Macから接続するならこれでOK.
Windowsの場合,Windows側にもAvahiをインストールする必要があるらしい.けど,もしiTunesがインストールされてればBonjourがインストールされてるので,これでOK.BonjourとAvahiの関係は,まぁ調べてくださいな.
ちなみに,Raspbmcではもともとインストールされているようだ.だから,
でつながる.ssh pi@raspbmc.local
では,お試しあれ.