ホーム » コンピュータ » Linux (ページ 24)

「Linux」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

WEX733DのMACアドレスが変化

メッシュネットワークも一通り設定が終わり、安定して使えるように…と思ったら、1F居間と2FをつなぐWEX733Dから返答がない。(icingaを使って主要なデバイスの生死監視をしている)

確かめてみると、親機に設定した際のMACアドレスと、違ったMACアドレスになっている。このため、こちらが想定しているWEX733DのIPアドレスと異なるため、ping などが取れなかった。

WEX733D-前 60:xx:xx:29:xx:xx
WEX733D-後 62:xx:xx:28:xx:xx

この症状は、他の Buffalo のルータでも確認していて、WZR-1166DHP2では、

WZR1166DHP2 B0:xx:xx:xx:xx:xx
WZR1166DHP2 B2:xx:xx:xx:xx:xx

のような値が取れていた。今回 WEX733D には、DHCP の fixed-address の設定を使っているため、これを正しく登録しておかないと、IPアドレスが変化してしまう。

今回のMACアドレスを確認すると、第1オクテットのBit1は、グローバルアドレスとローカルアドレスを区別するビットみたい。

そこで、60…と62…では、それぞれ違うIPアドレスを対応づけて、死活管理で以下のように設定した。

確認用の script では、2つの check_ping を || で連結し、本来のIPアドレスで返答がなければ、予備のIPアドレスの返答を確認することとした。

define command{
  command_name check_host_alive_multi
  command_line /usr/lib/nagios/plugins/check_ping
                  -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1
            || /usr/lib/nagios/plugins/check_ping
                  -H '$ARG1$' -w 5000,100% -c 5000,100% -p 1
  }

define host{
  use            generic-host
  host_name      wex733d
  alias          wex733d
  address        192.168.xx.xx
  check_command  check_host_alive_multi!192.168.xx.yy
  }

Windows Terminal preview 版

Microsoft による Windows Terminal が Microsoft Store で公開された。

さっそく立ち上げてみたけど、PowerShell にて端末が起動した。早速 ssh にて Linux に login して emacs を立ち上げてみる。以前のターミナルだと、漢字幅などで表示が崩れたけど、このバージョンはさすがに問題なし….

と思ったけど、M-x のつもりで、ESC→x と入力すると、ESC-M-x と表示される。普通に、alt-x と入力すれば M-x になるんだけど、レガシーなヤツは ESC-x が染みついている。

TH-D74でNoraGateway

D-STARのアクセスポイントをNoraGatewayで構築しようと、チャレンジしていたが無線機側をどう設定すればいいのか解らず、四苦八苦。

ようやく解ってきた。ポイントは、TH-D74をデジタルモードにしたうえで、DVモード。さらに、データモードに設定すれば動き出した。

{CAPTION}

しかし、動き出したのはいいけど、アクセスポイントに接続する無線機に付けたコールサインと、ゲートウェイに設定するコールサインが、別の免許状が必要。自宅の設備を自分が使えないのは不便だし、所属している社団コールサインの利用を検討してみよう。

TH-D74でaprxを動かす

以前、TH-D72 で aprx を動かしてみたけど、APRSとD-STARを兼ねた TH-D74 で運用をためしてみた。

initstring に何を設定すべきか悩んだけど、TH-D74はコマンドモードとKISSモードを切り替えながらという使い方はできない?みたいなので、設定は不要みたい。

# /etc/aprx.conf
mycall JR9PVZ-10
myloc  lat 3553.48N lon 13613.33E
<aprsis>
   passcode 22202
   server   rotate.aprs2.net
</aprsis>
<logging>
   pidfile /var/run/aprx.pid
   rflog   /var/log/aprx/aprx-rf.log
   aprxlog /var/log/aprx/aprx.log
   dprslog /var/log/aprx/dprs.log
</logging>
<interface>
   serial-device /dev/ttyACM0 9600 8n1 KISS
   # initstring  "" THD74は基本KISSモードなので初期化無し
   alias       RELAY,WIDE,TRACE
   callsign    $mycall # callsign defaults to $mycall
   tx-ok       true # transmitter enable defaults to false
   telem-to-is false # set to 'false' to disable
</interface>
<beacon>
   beaconmode both
   cycle-size 60m
   beacon     symbol "I#" $myloc comment "Tx-iGate + Digipeater"
</beacon>
<digipeater>
   transmitter $mycall
   <source>
      source   $mycall
   </source>
</digipeater>

TH-D74の設定

[F]-[LIST],[F]-[LIST] KISSモード
— パケットスピード 9600 bps
— 無線周波数 144.640 MHz

 

後で、TH-D72 で動作検証するかもしれないので、設定ファイルを2つ別に分けて切り替える設定を追加。

iphoneの検知難しい

大学でアパート住まいの子供が、帰っているのか確認するために、LINE beacon を置いて検知を試したけど、bluetooth を切って既読スルーなヤツなので、ほとんど検知することができない。

そこで、アパートでは無線LANルータを使ってるし Raspberry-Pi で、arpalert を使えば簡単に検知できるだろうと、実験中。でも iPhone はセキュリティ対策なのか、 arp の返答は必要最小限なので同じサブネットとはいえ、そのままでは通信の必要の無い raspberry-pi には、ARP 情報が送られてこない。また ping には返答しないようで、単純に ping で確認も困難。ということで単純な arpalert では検知が難しいなぁ。

定時処理で、”arping -c 1 -I wlan0 IPHONEのIPアドレス” を実行させて、強制的に ARP を送ってもらうか…

cec-clientのデバイス番号とアドレス番号

自宅では、テレビやケーブルテレビチューナーやレコーダを赤外線リモコンで制御できるようにしているが、電源はトグル動作でON→OFFかOFF→ONという制御ができない。そこで、HDMI端子経由のチャンネル制御を行っている。

この際に、デバイス番号とcecのアドレス番号を使うが、デバイス番号が時々変化している。

しかたがないので、cecのscan処理でデバイス番号とアドレス番号の対応情報を保存するようにしてみた。

#!/usr/bin/perl

my $cec = "/usr/bin/cec-client -d 1 -s" ;

open( my $fd , "/bin/echo 'scan' | $cec |" )
    || die( "Can't open $cec\n" ) ;
open( my $ft , "> /home/xxxxxxxx/lib/cec-table.sh" )
    || die( "Can't open cec-table.sh\n" ) ;

my $device  = "" ;
my $dev_str = "" ;
my $address = "" ;
my $osd_str = "" ;

print $ft "#!/bin/bash\n" ;

while( my $line = <$fd> ) {
    if ( $line =~ /^device\s+#(\d+):\s+(.*?)$/ ) {
        $device  = $1 ;
        $dev_str = $2 ;
    } elsif ( $line =~ /^address:\s+(\d+)\.0\.0\.0$/ ) {
        $address = $1 ;
    } elsif ( $line =~ /^osd\s+string:\s+(.*?)$/ ) {
        $osd_str = $1 ;

        print $ft "DEV[$address]=$device\n" ;
        print $ft "OSD[$address]=\"$osd_str\"\n" ;
    }
}
close( $fd ) ;
close( $ft ) ;

stretchで起動しづらい

自宅で色々と動いている Raspberry-Pi 。OS更新はまめにやっているけど、外気温測定に使っているのが Jessie のままだったのに気づく。stretch に上げたけど、どうも起動に失敗する。更新に失敗したかと思ったけど、キーボードをつなぐために USB WiFi を抜いて起動すると、普通に動いている。

今までも、多少 boot が不安定なのはあったけど、stretch になって起動シーケンスが最適化されたのか、WiFi 有効化のタイミングが早まり、ブート時の電力不足が発生していると思われる。

ひとまず、改造面倒だし USB WiFi を抜いて、boot がそれなりに進んでから USB を指して対応。

アマチュア無線: aprx を動かしてみた

知り合いより譲り受けた、TH-D72を活用したいということで、APRS の iGate 局を動かしてみた。

我が家は、ロケーション的に福井市にあるリピータにも、ハンディ機では接続できず、無線機の位置情報などをインターネットに伝えることができる APRS や、インターネットを経由した通話ができる D-STAR などを、あまり活用することが難しい。

aprx を動かす

そこで、TH-D72 を APRS の iGate 局として動かすために、aprx をインストール。

以下のように設定したけど、まずい所がないか要チェックだな。ひとまず、データ流しまくりでaprsインターネット側には、迷惑をかけていないはず。ハンディ機なので、どのあたりまで電波が飛んでいるのか、チェックしてみよう。

$ sudo aptitude install aprx
$ sudo vi /etc/aprx.conf
$ sudo systemctl enable aprx.service
$ sudo systemctl start aprx.service
# /etc/aprx.conf
mycall JR9PVZ-10
myloc  lat 3553.48N lon 13613.33E
<aprsis>
   passcode 22202
   server   rotate.aprs2.net
</aprsis>
<logging>
   pidfile /var/run/aprx.pid
   rflog   /var/log/aprx/aprx-rf.log
   aprxlog /var/log/aprx/aprx.log
   dprslog /var/log/aprx/dprs.log
</logging>
<interface>
   serial-device /dev/ttyUSB1 9600 8n1 KISS
   initstring  "HBAUD 9600\x0dKISS ON\x0dRESTART\x0d"
   alias       RELAY,WIDE,TRACE
   callsign    $mycall # callsign defaults to $mycall
   tx-ok       true # transmitter enable defaults to false
   telem-to-is false # set to 'false' to disable
</interface>
<beacon>
   beaconmode both
   cycle-size 60m
   beacon     symbol "I#" $myloc comment "Tx-iGate + Digipeater"
</beacon>
<digipeater>
   transmitter $mycall
   <source>
      source   $mycall
   </source>
</digipeater>

TH-D72の設定

[TNC]-[TNC] KISSモード
[メニュー]-310 データバンド A-BAND
[メニュー]-311 パケットスピード 9600 bps
— 無線周波数 144.640 MHz

Postieでimap-ssl接続に失敗

職場のサーバでWordPressを動かす中、簡単な画像付きメールでのポストをするために、plugin の Postie を使っている。

状況確認

当初は、imap-ssl で動かしていたのだが、接続に失敗するようになった。

Postie (v 1.9.32)
getemails: There was an error connecting to the server 

メールサーバが、自宅メールサーバなので、FireWall 関連の設定のミスが考えられたが、nagios-plugins を入れて実験すると、以下のような結果なので、接続はできている。

$ /usr/lib/nagios/plugins/check_imap -p 993 -H xxxx -S
IMAP OK - 0.146 second response time on xxxx port 993 [* OK
  [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE
  IDLE LITERAL+ AUTH=PLAIN] Dovecot (Debian) ready.]
  |time=0.145649s;;;0.000000;10.000000

問題点

原因を確認ということで、syslog を確認すると、以下のように SSL のハンドシェークでエラーが出ている。

Mar 24 00:50:39 xxxx dovecot: imap-login: Disconnected
  (no auth attempts in 0 secs): user=<>, rip=xx.xx.xx.xx,
  lip=192.168.xx.xx, TLS handshaking: SSL_accept() failed:
  error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert
  unknown ca: SSL alert number 48, session=<xxxxxx>

暫定の解決法

しかたがないので、dovecot の ssl の設定を変更、TLSv1.2 になっていた部分を TLSv1 に修正

(( /etc/dovecot/conf.d/10-ssl.conf ))
- ssl_min_protocol = TLSv1.2
+ ssl_min_protocol = TLSv1

”TLS 1.0にはBEASTやPOODLEといった脆弱性があり、一定の条件下であれば暗号解読が可能であると言われています。”で、2018年6月30日以降は、TLSv1.0 は通常用途では勧められないとのことなので、多少心配ではあるけど…。

通常使っているメールソフトは、TLSv1.0 を使わないだろうし、実質このPostieだけの利用だろうし。

he.net を使った IPv6 トンネル

IPv6 の導入の実験として、IPv6トンネルを無料で利用できる he.net を使って設定してみた。

現在、自宅サーバ自体を IPv6 対応することはできたけど、サーバ配下のパソコンもこのトンネルを使うようにできていないので、まだ目標の半分。

he.netへの登録

Hurricane Electric(he.net)の接続方法を紹介しているサイトの記事を見ながら、he.net に利用者登録をして、トンネルの割り当てを受ける。

トンネル起動の設定

he.netのサイトで、上記の登録が終わると、”Example of Configuration”のタブで、OSを選べば、接続するための設定ファイルのサンプルが表示される。

ただ、Debian/Ubuntu を選ぶと、/etc/network/interfaces 用の設定が示された。自宅サーバは systemd を使っているので、このままでは使えない。ほかのサイトで調べて、最終的に以下に落ち着いた。

(( /etc/systemd/system/he-ipv6.service ))
[Unit]
Description=he.net IPv6 tunnel
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/ip tunnel add he-ipv6 mode sit remote 74.82.xx.xx local 192.168.yy.yy ttl 255
ExecStart=/bin/ip link set he-ipv6 up mtu 1480
ExecStartPost=/bin/sleep 0.3 ; /bin/ip -6 route add ::/0 dev he-ipv6
Execstop=-/bin/ip -6 route del ::/0 dev he-ipv6
ExecStop=/bin/ip link set he-ipv6 down
ExecStop=/bin/ip tunnel del he-ipv6

[Install]
WantedBy=multi-user.target

systemd の サービス として設定するために、he-ipv6.service ファイルを作成する。

systemd ではサービスの処理を起動/停止するためのコマンドは、ExecStart / ExecStop に記載する。

“ip tunnel add” の remote 欄は、割り当てられたhe.net のIPアドレス、localには自分のグローバルアドレスを指定する。ただし、自宅サイトはルータ内にサーバがあるので、ポートフォワードされたプライベートのアドレスを指定する。

トンネル開通後のIPv6のデフォルトゲートウェイを設定する “ip -6 route add” の実行は、少し間を置かないと失敗するようなので、若干の sleep を挟んだ。ExecStart 行は、通常1行1コマンドしか使えないが、ExecStartPost は、複数コマンドが書けるので、こういう時には便利。

ExecStop でのデフォルトゲートウェイ削除の処理 “ip -6 route del ::/0″では、前述のsleepが無い場合、エラーが出ることがあるので、コマンドの先頭に”-“をつけエラーで止まらないようにしておいた。

# サービスの登録
$ sudo systemctl enable he-ipv6.service
# サービスの起動
$ sudo systemctl start he-ipv6.service
# サービスの停止
$ sudo systemctl stop he-ipv6.service

ただし、後にも述べるように常時 IPv6 化は現状では問題があるので、systemctl enable は行わないでおく。

RAの設定(ルーティング広告)

ルータ周りの他のパソコンがグローバルなIPv6アドレスが割り当てられるように、RAの設定を行う。実は、リンクローカル”fe80::”での自宅内IPv6ネットワークの運用では、グローバルIPv6が無いので RA が不要だけど、IPv6の DNS をアナウンスが必要なので、今までは DHCPv6 を使っていた。でも、radvd.conf の設定を調べると、アナウンスするプレフィックス設定の欄を “prefix ::/64” と記載すれば、”fe80::”のリンクローカルはアナウンスされないようなので、radvd に変更。”RDNSS”の欄で、自宅内 IPv6 対応なDNSサーバを指定することで、IPv6経由で名前解決をできるようにしておく。

interface eth0
{
   AdvSendAdvert on;
   AdvManagedFlag on;
   AdvOtherConfigFlag on;
   
   # 非リンクローカルなアドレスだけアナウンス
   prefix ::/64
   {
      AdvOnLink on;
      AdvAutonomous on;
      AdvRouterAddr on;
   };

   # DNSは、リンクローカルなDNSサーバをアナウンス
   RDNSS fe80::xxxx:xxxx:xxxx:xxxx
   {
      AdvRDNSSLifetime 30;
   };
   DNSSL example.jp {
      AdvDNSSLLifetime 30;
   };
};

この段階で、IPv6 のファイアウォールの設定(ferm)の設定が間違っているのが判明したので、別途修正。

常時IPv6対外接続は問題あり

よく、IPv6 を使うとネット通信速度が速くなると言われているけど、現時点では IPv6 利用者が少ないので、上流が詰まらないだけ。今回のような、IPv4 を使ったIPv6トンネリングでは、IPv4 以上には速くなるはずもないし、IPv6 も無料でサービスを提供している he.net では、上流の輻輳もあるだろうし高速通信も期待できない。

このため、上記の IPv6 接続は単なる自分の勉強用で、必要な時だけ”systemctl start he-ipv6.service”でトンネル接続させる予定。。当面、常時 IPv6 運用はしないだろう。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト

メタ情報