家にヒキコモったままw ナビアプリを検証する環境を構築できたので,実際にナビさせてみることにした.
前回,kml の座標データを送信するスクリプトをわざわざ書いたのは実はもうひとつ目的があって,「PC の Google マップで検索したルート (= kml に記録されているルート)」と「Android で検索したルート」が一致するかの確認も兼ねている.これが一致しないとこのアプリの前提が崩れてしまうので.
で,やってみた結果↓
経由地到達時の次経由地へのナビ起動は,割りと上手くいっているみたい.ただ,経由地毎に画面がガチャガチャ切り替わっているのがちょっとうざいw たまにナビ再起動に失敗するので,ナビ kill→ナビ起動 に wait を入れることで対応した.
また嬉しい事に,完全にナビが終わった後なら次のナビを起動してもボタンキャンセルは要らなかった.これで root 必須じゃなくなったので,公開できる可能性が一気に高まった.
また気にしていた,Google マップのAndroid/PC の違いによるルート検索の差異は,今のところ無いみたいで安心.
これで,まぁまぁ使い物になる感触を得た.
あとはツーリングに行くだけだwww
あと,恒例のコレジャナイ感たっぷりのアイコン↓
2014年7月27日日曜日
2014年7月26日土曜日
ツーリング用ナビアプリ プロジェクト(3)
ツーリング用ナビアプリのデバッグで実際にナビさせたい.
と言ってもいきなり実走試験するわけにはいかないので,GPS アプリに擬似 GPS 情報を与えるために Bluetooth GPS というアプリを使用した.
これは本来は,外部 GPS 機器のデータを Bluetooth で Android で送信して利用するためのアプリだが,普通に「PC + BT ドングル」⇔「Bluetooth GPS」でも繋がるので,PC から道路を移動する座標を送信し続ければ,所望のことは実現できる.
というわけで kml に記録されたルートの座標を連続で送出する perl スクリプトを書いた.と言ってもやることは基本的には単純で,kml の座標を NMEA に変換して仮想シリアルポートに write するだけ.
と思ったのにこんなことでハマるハマるwww 何故か PC から送信している座標が無視されてしまい,WiFi による測位とかそっちの測位結果が使用されてしまう(;´д⊂)
手持ちの GPS 機器⇔Bluetooth GPS なら正常なので,Bluetooth GPS がおかしい可能性は低い.ならば NMEA フォーマットがおかしいのかと試行錯誤してみた結果,どうやら Android は単純に NMEA の座標を使用するのではなく,NMEA データの精度・信頼性を評価した上でおかしいと判断した場合は他の測位手段を使用しているっぽい.
具体的には,日時,方位,速度,$GPGGA の捕捉衛星数・HDOP などなど.
kml には方位,速度等足りない情報があるので,それらを演算で生成して NMEA に付与したら,やっとこさ Google マップを騙すことが出来たヽ(´ー`)ノ 高度等,求めようがないデータは固定で.
NMEA パラメータの何が省略できるかまでは検証してないけど,ひとまず↓の情報だと ok だった.
と言ってもいきなり実走試験するわけにはいかないので,GPS アプリに擬似 GPS 情報を与えるために Bluetooth GPS というアプリを使用した.
これは本来は,外部 GPS 機器のデータを Bluetooth で Android で送信して利用するためのアプリだが,普通に「PC + BT ドングル」⇔「Bluetooth GPS」でも繋がるので,PC から道路を移動する座標を送信し続ければ,所望のことは実現できる.
というわけで kml に記録されたルートの座標を連続で送出する perl スクリプトを書いた.と言ってもやることは基本的には単純で,kml の座標を NMEA に変換して仮想シリアルポートに write するだけ.
と思ったのにこんなことでハマるハマるwww 何故か PC から送信している座標が無視されてしまい,WiFi による測位とかそっちの測位結果が使用されてしまう(;´д⊂)
手持ちの GPS 機器⇔Bluetooth GPS なら正常なので,Bluetooth GPS がおかしい可能性は低い.ならば NMEA フォーマットがおかしいのかと試行錯誤してみた結果,どうやら Android は単純に NMEA の座標を使用するのではなく,NMEA データの精度・信頼性を評価した上でおかしいと判断した場合は他の測位手段を使用しているっぽい.
具体的には,日時,方位,速度,$GPGGA の捕捉衛星数・HDOP などなど.
kml には方位,速度等足りない情報があるので,それらを演算で生成して NMEA に付与したら,やっとこさ Google マップを騙すことが出来たヽ(´ー`)ノ 高度等,求めようがないデータは固定で.
NMEA パラメータの何が省略できるかまでは検証してないけど,ひとまず↓の情報だと ok だった.
$GPGGA,012345,3401.234567,N,13501.234567,E,1,12,0.5,10.0,M,,,,*1B
$GPRMC,012345,A,3401.234567,N,13501.234567,E,34.55723,121.52,250714,,,A*47
2014年7月21日月曜日
ツーリング用ナビアプリ プロジェクト(2)
プロジェクト ツーリング用ナビ の続き.
Google マップのマイマップでエクスポートした KML を Android の MapView に読み込むとこまでできた.
直接 MapView が KML をレンダリングしてくれればチョー楽だったんだけど,残念ながらそこまでは行けてなかった.
しかたがないので,XmlPullParser で KML をパースして WayPoint とルートの線をここらへんを見ながら
←表示してみた.
ウヒョヒョwww だいぶいい感じ.
ここまでできたので,次にナビの起動を実装してみた.前回書いたようにナビの起動自体はインテントを投げるだけなんだけど,ここで問題発生.
経由地に到達したら (Google ナビが起動中の状態で) 次のナビを起動することになるけど,そうすると前動いていた方のナビで「ナビを終了しますか?」というダイアログが表示されて,手動でボタンを押さないと次のナビが起動しない.経由地毎に操作するとかありえないので,これは痛い.
仕方がないので,次のナビを起動する前に Google マップのプロセスを強制終了させることにした.普通は ActivityManager.killBackgroundProcesses() で kill できるはずなんだけど,どうやってもうまくいかない.で Automatic Task Killer とか他のタスクキラーアプリの挙動を観察していると,どうもナビ起動中の Google マップは killBackgroundProcesses() 出来なさそうなことがわかった(;´д⊂)
android.os.Process.killProcess() なら kill できるけど root 権限必須だし.
別の切り口で,ここによると
んー,困った.
Google マップのマイマップでエクスポートした KML を Android の MapView に読み込むとこまでできた.
直接 MapView が KML をレンダリングしてくれればチョー楽だったんだけど,残念ながらそこまでは行けてなかった.
しかたがないので,XmlPullParser で KML をパースして WayPoint とルートの線をここらへんを見ながら
←表示してみた.
ウヒョヒョwww だいぶいい感じ.
ここまでできたので,次にナビの起動を実装してみた.前回書いたようにナビの起動自体はインテントを投げるだけなんだけど,ここで問題発生.
経由地に到達したら (Google ナビが起動中の状態で) 次のナビを起動することになるけど,そうすると前動いていた方のナビで「ナビを終了しますか?」というダイアログが表示されて,手動でボタンを押さないと次のナビが起動しない.経由地毎に操作するとかありえないので,これは痛い.
仕方がないので,次のナビを起動する前に Google マップのプロセスを強制終了させることにした.普通は ActivityManager.killBackgroundProcesses() で kill できるはずなんだけど,どうやってもうまくいかない.で Automatic Task Killer とか他のタスクキラーアプリの挙動を観察していると,どうもナビ起動中の Google マップは killBackgroundProcesses() 出来なさそうなことがわかった(;´д⊂)
android.os.Process.killProcess() なら kill できるけど root 権限必須だし.
別の切り口で,ここによると
FLAG_ACTIVITY_CLEAR_TOP を設定することでタスクに積まれたアクティビティを再開させることができる(タスクに積まれていなければ新しく開始される)。これだ!(`・ω・´) シャキーン と思ってやってみたけど,状況変わらず(´・ω・`) ショボーン
このとき、再開されたアクティビティより上に詰まれた(新しい)アクティビティはすべてが破棄される。
つまり、アプリ実行時に最初に起動されるアクティビティを呼び出すことで最初の状態に戻すことができる。
んー,困った.
2014年7月20日日曜日
ツーリング用ナビアプリ プロジェクト開始
ツーリング用の Android カーナビアプリを作るプロジェクトをおもむろに開始.
ツーリングでは特定の道を通ることが重要なので,経由地指定機能は必須なんだけど,Google マップのナビにはその機能はない.他の有料ナビアプリだと経由地を指定できるものもあるが,PC との連携が皆無なのでルート作成もスマフォ上で作らないといけないのでやってられない.
というわけで昔なつかしの gpshook テクノロジw で上記のことを実現することにした.
要は,次の経由地までのナビを起動して,経由地に到達したらまた次の経由地のナビを起動する,ということを繰り返すだけなんだけどw
ルート作成は PC の Google マップの「マイマップ」で作成して kml にエクスポートすればよさげ.
肝心のナビの起動はここにあるように,インテントを投げるだけなんで超簡単.
単に経由地に到達したら次のナビを起動,だけなら UI も何もいらないレベルなのだが,
・kml を読み込んだ時にルート全体を地図に表示する
・ある経由地をスキップして別の経由地を目指す機能.これも地図上の経由地マーカーをタップするとか,そんな感じの UI
を実現したいので,手始めに Google マップをアプリ内に表示させるようにしてみた.
これがハマルハマル(;´д⊂)
まず MapView についてググると API V1 についてのサンプルが多く,現在 API V2 しかサポートされてないので,どっちの記事かをわかっていないと,コードをコピペしても地図が真っ白とか,中途半端に動かない.更に API の仕様? も事細かに更新されているらしく,Google 公式サンプルですらコンパイルエラーとか(;´д⊂)
ぬるぽで死ぬたびにエラーメッセージググって修正,とういうのを繰り返して,やっと Google マップを表示できたよヽ(゜ーÅ)ノ
自分用メモ:
AndroVM で MapView が表示されない時は,AndroidManifest.xml の android:hardwareAccelerated="false" にする
ツーリングでは特定の道を通ることが重要なので,経由地指定機能は必須なんだけど,Google マップのナビにはその機能はない.他の有料ナビアプリだと経由地を指定できるものもあるが,PC との連携が皆無なのでルート作成もスマフォ上で作らないといけないのでやってられない.
というわけで昔なつかしの gpshook テクノロジw で上記のことを実現することにした.
要は,次の経由地までのナビを起動して,経由地に到達したらまた次の経由地のナビを起動する,ということを繰り返すだけなんだけどw
ルート作成は PC の Google マップの「マイマップ」で作成して kml にエクスポートすればよさげ.
肝心のナビの起動はここにあるように,インテントを投げるだけなんで超簡単.
単に経由地に到達したら次のナビを起動,だけなら UI も何もいらないレベルなのだが,
・kml を読み込んだ時にルート全体を地図に表示する
・ある経由地をスキップして別の経由地を目指す機能.これも地図上の経由地マーカーをタップするとか,そんな感じの UI
を実現したいので,手始めに Google マップをアプリ内に表示させるようにしてみた.
これがハマルハマル(;´д⊂)
まず MapView についてググると API V1 についてのサンプルが多く,現在 API V2 しかサポートされてないので,どっちの記事かをわかっていないと,コードをコピペしても地図が真っ白とか,中途半端に動かない.更に API の仕様? も事細かに更新されているらしく,Google 公式サンプルですらコンパイルエラーとか(;´д⊂)
ぬるぽで死ぬたびにエラーメッセージググって修正,とういうのを繰り返して,やっと Google マップを表示できたよヽ(゜ーÅ)ノ
自分用メモ:
AndroVM で MapView が表示されない時は,AndroidManifest.xml の android:hardwareAccelerated="false" にする
2014年7月17日木曜日
DD-WRT につぶやかせてみる
DD-WRT は素の Linux に近いとはいえ,/var/log 系があまり充実していない.また出先から DD-WRT の状態を知ろうにも,Android で PPTP セッション張ってブラウザ立ち上げて…,とか面倒なので,DD-WRT に自発的に自分の状態をつぶやかせてみることにした.
最初は Basic Auth とかで wget で適当な URL + Query String を指定すれば ok だろうと軽く考えていたのだが,なんか Twitter は OAuth を採用していて (今更気づいた),wget + スクリプトで対応できる範疇を超えている.
んー,と思って色々探してみたら,StewGate-U というサービス発見!!
これは OAuth の認証を肩代わりしてくれるプロキシで,StewGate に対し簡単な http アクセスをするだけであとは StewGate⇔Twitter 間で OAuth 認証をやってくれる.
というわけで,DD-WRT からつぶやいてみたのが上の画像.
DD-WRT 内蔵の wget コマンドは POST データを送信するオプションが省かれていたので,curl をクロスコンパイルしてやってみた.
これで色々面白いことができそうヽ(´ー`)ノ
最初は Basic Auth とかで wget で適当な URL + Query String を指定すれば ok だろうと軽く考えていたのだが,なんか Twitter は OAuth を採用していて (今更気づいた),wget + スクリプトで対応できる範疇を超えている.
んー,と思って色々探してみたら,StewGate-U というサービス発見!!
これは OAuth の認証を肩代わりしてくれるプロキシで,StewGate に対し簡単な http アクセスをするだけであとは StewGate⇔Twitter 間で OAuth 認証をやってくれる.
というわけで,DD-WRT からつぶやいてみたのが上の画像.
DD-WRT 内蔵の wget コマンドは POST データを送信するオプションが省かれていたので,curl をクロスコンパイルしてやってみた.
これで色々面白いことができそうヽ(´ー`)ノ
ラベル:
OpenWRT・DD-WRT
2014年7月2日水曜日
クラウドのトラブルを食らうど!
ここに次世代ブロードバンド時代の新たなギャグが誕生した.
いやね,アマゾンでは日替わりで有料アプリをタダで配っているので,有用なアプリはゲットしていた.
で,それらはアマゾンシステム的には ¥0 で「買った」ことになっているのでライセンス管理的なものがきっちりなされているっぽいのだが,ある日端末上で (¥0 で) 購入したアプリが Amazon Apps の購入リストから消え去っていたwww (左の画像)
でその状態で,買ってない扱いになったアプリを立ち上げると「コンテンツは所有されていません」というメッセージとともに強制終了されると(;´д⊂)
で結果から言ってアマゾンシステム側の問題っぽいのだが,アマゾン側も原因を掴みあぐねているのか解決に 1月程かかった.
今回はタダで貰ったものばかりだしアマゾン側もちゃんと対応してくれたから良かったけど,突然アカウントを消されたりする事例もあるし,メールなんか 100% Google に預けてるし,最近は写真も全部 Picasa に UP してローカルのは消してるし.
クラウド危険性にちょっとだけ触れた今日このごろ.
いやね,アマゾンでは日替わりで有料アプリをタダで配っているので,有用なアプリはゲットしていた.
で,それらはアマゾンシステム的には ¥0 で「買った」ことになっているのでライセンス管理的なものがきっちりなされているっぽいのだが,ある日端末上で (¥0 で) 購入したアプリが Amazon Apps の購入リストから消え去っていたwww (左の画像)
でその状態で,買ってない扱いになったアプリを立ち上げると「コンテンツは所有されていません」というメッセージとともに強制終了されると(;´д⊂)
で結果から言ってアマゾンシステム側の問題っぽいのだが,アマゾン側も原因を掴みあぐねているのか解決に 1月程かかった.
今回はタダで貰ったものばかりだしアマゾン側もちゃんと対応してくれたから良かったけど,突然アカウントを消されたりする事例もあるし,メールなんか 100% Google に預けてるし,最近は写真も全部 Picasa に UP してローカルのは消してるし.
クラウド危険性にちょっとだけ触れた今日このごろ.
2014年5月25日日曜日
10年後のブロードバンド環境
NTT から電話がかかってきた.要は「eo光からフレッツ光に乗り換えませんか?」というセールス電話だったのだが,まぁ 1円でも安くなるんならと話を聞いていたけど,100M→1Gbps になる代わりに料金は +¥400/月,と聞いた時点で興味は失った.
で値段が上がるならイラネ,と伝えると,相手が言った言葉が
「フレッツに変えてもらったら,これからのブロードバンド環境に対応した 1Gbps で通信できて,10年先でもお使いいただけます!」
これからのブロードバンド環境ってなんだよw なにそのマニュアル感たっぷりの文言www って思った瞬間に電話口でブーって吹いてしまったwww 大体 1Gbps 必要になる状況ってファイル共有以外思いつかんけど,それがこれからのブロードバンド環境なんだろうか.
いや,10年後には YouTube で 8k4k を見る時代が来るってことを,セールスの人は見抜いていたのか.
で値段が上がるならイラネ,と伝えると,相手が言った言葉が
「フレッツに変えてもらったら,これからのブロードバンド環境に対応した 1Gbps で通信できて,10年先でもお使いいただけます!」
これからのブロードバンド環境ってなんだよw なにそのマニュアル感たっぷりの文言www って思った瞬間に電話口でブーって吹いてしまったwww 大体 1Gbps 必要になる状況ってファイル共有以外思いつかんけど,それがこれからのブロードバンド環境なんだろうか.
いや,10年後には YouTube で 8k4k を見る時代が来るってことを,セールスの人は見抜いていたのか.
2014年5月18日日曜日
Powwwwwweeeeeeeeeerrrrrrrrrr!!!!
by ジェレミー
ってこのネタもうやったっけ.
PC からストロボチャージ音のような「チュイーン」という結構大きい音がするようになった.最初は HDD が異音を発しているのかと心臓が凍りかけたが,結局音源は電源ユニットだったようで.それでも音程がだんだん上がっていくので,最終的に煙吹いたりしないかとかだんだん不安になってくるw
ちょくちょくアップグレードはしてるけど基本的には 6年前に組んだマシンなので,これを機に新規に組み直すか? と思ったけど,AMD は APU に力を入れているようで,CPU 性能自体は今より下がるくらいなのでパス (PC でゲームしないのでグラフィック性能はいらないし).殿様商売のインテルはハナから買う気がないし.
というわけで結局電源だけ買い直した.玄人志向の ATX電源 400W KRPW-L4-400W/A.
レビューではファンはうるさくないとの事で,確かにファンの風切音はほぼしないが,軸受け? がハズレだったようでわずかに異音がする.安物だから文句は言わないけど,静音に拘る人にはおすすめしないかも.
古い HDD とかの 4pin 電源コネクタがケースファンで多用されていてコネクタが足りなかったので,壊れた電源からケーブル切り出してコネクタ増設ケーブルを作った.
あと今回いろいろ調べて知ったけど,電源ユニットって結構消耗品なんだなぁ.
ってこのネタもうやったっけ.
PC からストロボチャージ音のような「チュイーン」という結構大きい音がするようになった.最初は HDD が異音を発しているのかと心臓が凍りかけたが,結局音源は電源ユニットだったようで.それでも音程がだんだん上がっていくので,最終的に煙吹いたりしないかとかだんだん不安になってくるw
ちょくちょくアップグレードはしてるけど基本的には 6年前に組んだマシンなので,これを機に新規に組み直すか? と思ったけど,AMD は APU に力を入れているようで,CPU 性能自体は今より下がるくらいなのでパス (PC でゲームしないのでグラフィック性能はいらないし).殿様商売のインテルはハナから買う気がないし.
というわけで結局電源だけ買い直した.玄人志向の ATX電源 400W KRPW-L4-400W/A.
レビューではファンはうるさくないとの事で,確かにファンの風切音はほぼしないが,軸受け? がハズレだったようでわずかに異音がする.安物だから文句は言わないけど,静音に拘る人にはおすすめしないかも.
古い HDD とかの 4pin 電源コネクタがケースファンで多用されていてコネクタが足りなかったので,壊れた電源からケーブル切り出してコネクタ増設ケーブルを作った.
あと今回いろいろ調べて知ったけど,電源ユニットって結構消耗品なんだなぁ.
2014年5月17日土曜日
笠取山分屯基地 開設 58周年記念行事
今年も笠取山分屯基地の一般開放イベント (開設 58周年記念行事) に行ってきた.
展示内容は毎年あまり変わらないみたいで新鮮さは乏しいけど,基地 (青山高原) までの道は結構いいワインディングロードなので,毎年ソロツーリングを兼ねて行くことにしている.といっても去年は青山高原の道路が崩壊していて中止になったけど.
やっと見れましたパトリオット・ミサイル.一昨年の展示から (多分) 唯一増えた展示.
初めて知ったけど,この基地の割と近くに別の地対空ミサイル部隊の基地があって,そこのが出張してきているみたい.
全然関係ないけど,このムゥイィィィンって音聞くと,エイリアン 2 のドロップシップを思い出すわ.
あとは,まぁ…いつものw
と思ったら,前回は見ずに帰った捜索救助訓練展示 (要はヘリで吊り下げて救助するデモ) というのを初めて見たけど,これが結構すごい.
ビデオだと小さめにしか映らないので伝わりにくいけど,結構近い (30m くらい?) ところでホバリングしてるのですごい迫力だった.
展示内容は毎年あまり変わらないみたいで新鮮さは乏しいけど,基地 (青山高原) までの道は結構いいワインディングロードなので,毎年ソロツーリングを兼ねて行くことにしている.といっても去年は青山高原の道路が崩壊していて中止になったけど.
やっと見れましたパトリオット・ミサイル.一昨年の展示から (多分) 唯一増えた展示.
初めて知ったけど,この基地の割と近くに別の地対空ミサイル部隊の基地があって,そこのが出張してきているみたい.
全然関係ないけど,このムゥイィィィンって音聞くと,エイリアン 2 のドロップシップを思い出すわ.
あとは,まぁ…いつものw
と思ったら,前回は見ずに帰った捜索救助訓練展示 (要はヘリで吊り下げて救助するデモ) というのを初めて見たけど,これが結構すごい.
ビデオだと小さめにしか映らないので伝わりにくいけど,結構近い (30m くらい?) ところでホバリングしてるのですごい迫力だった.
ラベル:
イベント・ツーリング
2014年4月20日日曜日
DD-WRT でゲスト用 WiFi AP を作る
訳あってゲスト用 WiFi アクセスポイント (WAN とは繋がるが LAN の他機器とは繋がらない AP) を作ることにした.といっても物理的な WiFi ルータを増設するわけではなく,DD-WRT なら仮想 WiFi I/F を作れるので,設定だけで下のようなネットワークを構成できる.

ルールがカラなうえ,default が全部 ACCEPT とかもうね.内から外に出られないばかりか,外からは丸見え状態www
なんか仮想 WiFi I/F 足しただけで,iptables の設定はすべて吹っ飛ぶのね…
というわけで昔 Linux でルータ組んだ時のことを思い出しつつ下のような iptables スクリプトを組んだ.
長ったらしいけど,キモは FORWARD チェインのところで,*->WAN, WAN->* のパケットを先に ACCEPT なり DROP なりした後,ゲスト LAN->*, *->ゲスト LAN のパケットを全破棄すれば,「ゲスト LAN は WAN しかアクセス出来ない」ということが実現できる.
WAN--DD_WRT-+-有線,WiFi I/F [192.168.0.x/24] ←本来の LAN
+-仮想 WiFi I/F [192.168.1.x/24] ←ゲスト用 WiFi
というわけでここを見ながら仮想 WiFi I/F の追加と DHCP の設定までしたところで,本来の LAN から外に一切出れなくなった.参照ページの後ろの方に iptables の設定が載っているので仮想 WiFi⇔WAN 通信には iptables 設定が必要なのだろうけど,I/F 足しただけでなんで本来 LAN に影響が出るんだ? と思って,iptables -nvL してみたら,root# iptables -nvL
Chain INPUT (policy ACCEPT 46 packets, 4591 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 28 packets, 1912 bytes)
pkts bytes target prot opt in out source destination
root#
↓
ルールがカラなうえ,default が全部 ACCEPT とかもうね.内から外に出られないばかりか,外からは丸見え状態www
なんか仮想 WiFi I/F 足しただけで,iptables の設定はすべて吹っ飛ぶのね…
というわけで昔 Linux でルータ組んだ時のことを思い出しつつ下のような iptables スクリプトを組んだ.
長ったらしいけど,キモは FORWARD チェインのところで,*->WAN, WAN->* のパケットを先に ACCEPT なり DROP なりした後,ゲスト LAN->*, *->ゲスト LAN のパケットを全破棄すれば,「ゲスト LAN は WAN しかアクセス出来ない」ということが実現できる.
#! /bin/sh
WanIF=ppp0 # WAN I/F
LanIF=br0 # 本来 LAN I/F
LanGstIF=ath0.1 # ゲスト WiFi I/F
LanIP=192.168.0.0/16 # 本来 LAN とゲスト LAN をカバーする IP アドレス・マスク
echo 1 > /proc/sys/net/ipv4/ip_forward
### local service ############################################################
State(){
iptables -A $1 -m state --state ESTABLISHED,RELATED -j ACCEPT # 接続済みを許可
iptables -A $1 -p tcp ! --syn -m state --state NEW -j DROP # おかしいパケットを廃棄
}
# ポート開放用のサブルーチン
OpenLocalPort(){
iptables -A WanIn -p tcp --dport $1 -j ACCEPT
}
# ポートフォワーディング用のサブルーチン
PortForward(){ # sport, dip, dport
iptables -t nat -A PREROUTING -p tcp -i $WanIF --dport $3 -j DNAT --to-destination $2:$3
iptables -A WanInFwd -p tcp -d $2 --dport $3 -j ACCEPT
}
### Flush & Reset ############################################################
iptables -F
iptables -t nat -F
iptables -X
### WAN in/out filter ########################################################
# WAN->lo 入力フィルタ
iptables -N WanIn
OpenLocalPort 80 # ポート開放例
iptables -A WanIn -j DROP
# WAN->どこか (FWD) 入力フィルタ
iptables -N WanInFwd
PortForward 21211 192.168.0.13 21211 # ポートフォワーディング例
iptables -A WanInFwd -j DROP
# WAN へ出力フィルタ
# ローカルアドレスを外に出さない
iptables -N WanOut
for ip in 10.0.0.0/8 176.16.0.0/12 192.168.0.0/16 127.0.0.0/8; do
iptables -A WanOut -d $ip -j DROP
done
# SMB 関係のパケットを外に出さない
for port in 137:139 445 111; do
iptables -A WanOut -p tcp --dport $port -j DROP
iptables -A WanOut -p udp --dport $port -j DROP
done
iptables -A WanOut -j ACCEPT
# ゲスト LAN からの入力フィルタ
# ゲスト LAN からルータの http サーバや SMB サーバにアクセスさせない
iptables -N LanGstIn
for port in 80 8080 22 137:139 445 111; do
iptables -A LanGstIn -p tcp --dport $port -j DROP
iptables -A LanGstIn -p udp --dport $port -j DROP
done
iptables -A LanGstIn -j ACCEPT # Guest LAN->lo を許可
### Deafult Rule #############################################################
iptables -P INPUT ACCEPT
State INPUT # ステートフルパケットフィルタ
iptables -A INPUT -i $WanIF -j WanIn # WAN->lo を filter
iptables -A INPUT -i $LanGstIF -j LanGstIn # ath0.1 からのパケットフィルタ
iptables -P OUTPUT ACCEPT
State OUTPUT # ステートフルパケットフィルタ
iptables -A OUTPUT -o $WanIF -j WanOut # lo->WAN を filter
iptables -P FORWARD ACCEPT
State FORWARD # ステートフルパケットフィルタ
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -i $WanIF -j WanInFwd # WAN->* を filter
iptables -A FORWARD -o $WanIF -j WanOut # * ->WAN を filter
iptables -A FORWARD -i $LanGstIF -j DROP # Guest->* を DROP
iptables -A FORWARD -o $LanGstIF -j DROP # *->Guest を DROP
# NAT
iptables -t nat -A POSTROUTING -s $LanIP -o $WanIF -j MASQUERADE
ラベル:
OpenWRT・DD-WRT
登録:
投稿 (Atom)








