2015年11月6日金曜日

OpenWrt で nc (NetCat) を使う

二台の無線 LAN アクセスポイントの OpenWrt へ BIND をインストールしました。このとき、設定ファイルの移動に nc (NetCat) を使用しました。
OpenWrt で BIND を使う
http://near-unix.blogspot.jp/2015/11/openwrt-bind.html

NETGEAR WG302 にも BIND をインストール
http://near-unix.blogspot.jp/2015/11/netgear-wg302-bind.html

ファイルの移動には wget を使用する方法もありますが、データを送り出す側で httpd や ftpd を稼働させておく必要があり、ファイル転送させるまでの準備のハードルが高いように感じられました。

そこでいろいろと便利な nc を使ってファイル転送を行いました。しかし OpenWrt に用意されてる Busybox 内の nc は簡略版のためか、フル装備の nc と同じように操作することができませんでした。しかしネット上を検索していたところ、OpenWrt のアップグレードに関するノウハウのページで nc の使い方のヒントを得ました。これを使って BIND の設定ファイルを移動させました。
Generic Sysupgrade - OpenWrt Wiki
http://wiki.openwrt.org/doc/howto/generic.sysupgrade

OpenWrt で nc の使い方

ファイル転送をするときには Linux などのパソコンと OpenWrt をインストールした無線 LAN ルータの間で行うことを前提としています。そのため OpenWrt をインストールしてある二台の無線 LAN ルータ同士でファイル交換するときには、一度 Linux パソコンを経由して移動させました。

無線 LAN ルータからパソコンへファイル転送

これはパソコン側の nc がリスン・モードで待受をしているところへ、無線 LAN ルータからデータを送りつけるものです。よく nc の使い方で説明されている方法です。7000 番ポートを使ってデータの受け渡しをします。

パソコン側 - 受信側(IP アドレス:192.168.1.2)
# nc -l -p 7000 > file1
     
無線LANルータ側 - 送信側(IP アドレス:192.168.1.1)
# nc 192.168.1.2 7000 < file1

パソコンから無線LANルータへファイル転送

これが問題でした。OpenWrt の nc はリスン・モード(-l)が使用出来ないのです。そのため、上記の逆の手順では nc によるファイル転送が出来ません。私も今回初めて知ったことですが、 nc コマンドには、受信だけでなく送信もリスン・モードにすることができるのです。パソコン側で送信データをリスン・モードで待受状態にしておき、そこで無線LANルータから受信のリクエストを送ってファイルを転送します。

パソコン側 - 送信側(IP アドレス:192.168.1.2)
# cat file1 | nc -l -p 7000
     
無線LANルータ側 - 受信側(IP アドレス:192.168.1.1)
# nc 192.168.1.2 7000 > file1

なおこの nc の操作をしても自動的にコマンドは終了しませんでした。Ctrl + C で適当なところで中断させました。OpenWrt のアップグレードの説明のページではパソコン側で pv コマンドを経由させて、転送の様子をモニタしながら送信のリスン・モードにするように奨めています。

パソコン側 - 送信側(IP アドレス:192.168.1.2)
# cat file1 | pv -b | nc -l -p 7000
     
無線LANルータ側 - 受信側(IP アドレス:192.168.1.1)
# nc 192.168.1.2 7000 > file1

以上、OpenWrt のノウハウの備忘録として記事にしておきました。

[追記 scp] 2015-11-09

scp でもパソコン側から無線 LAN ルータ側へファイル転送ができました。パソコン側からアップロードするとには nc より scp の方が使いやすいようです。
# scp file1 root@192.168.1.1:/tmp

0 件のコメント:

コメントを投稿