2016年08月19日

DCR-G54/U故障

発電所の遠隔監視装置に使用してたルーターDCR-G54/Uが故障した。調べてみると、設定した内容が全て消失してデフォルト状態になっている。再設定すれば、当然、故障前の状態に戻るが、一旦電源を抜くと、すぐに、デフォルト状態になる。つまり、内部のフラッシュメモリが壊れたとか、バックアップ用の電池が切れたとか・・・・・という状態。
ルーターの内部基板を取り出してみたが、電池らしいものはどこにもない。結局、DCR-G54/Uは、廃棄処分となった。

先日、書いたRaspberryPiをNATルーター化することにする。DCR-G54/Uが無くなっても、ルーティングは普通にできる。先日照会したソースよりも、少し進化したソースを導入する予定。RaspberryPiをNATルーター化に関するインターネット上の記事は大量にあるが、連続して、3G回線接続をさせようとすると、そんなに単純ではない。

さらに、先日vsftpd3.0.2のことを書いたが、最新のraspbian(Jessie lite)を導入すると、デフォルトで,3.0.2が導入される。古いOSを何度もupdateするのもいいが、メジャーなupdateのときは、デフォルトからRasoberry PiのSDカードを作り治す方がいいような気がする。
Jessieのくせというかルール変更もあるので、慣れるしかないところもある。


posted by bmasterna at 00:13| Comment(0) | 遠隔監視装置

2016年06月08日

Raspbeey Piを有線NATルーターとする

3G/USBドングルをRaspberry Piに直接挿して、ルーター機能を持たせれば、VPN-clientあるいはbridgeとNATルーターさらに、簡易なロガーも兼ねることができる。ルーターを別置しなくてもいい点がシンプルでよい。VPNクライアントとして利用するので、DHCPはVPNサーバー側に設置し、クライアント側には設置しない。クライアント側のIPアドレスは全て固定する。なお、3G/USBドングルは、L-05Aを使用するものとする。当然、isc-dhcp-serverやhostapdは不要。SIMは、トーンモバイル(旧DTI)のserverman SIM LTEを利用。

(1)IPアドレスを固定する。
最新のRaspbian/Jessieのデフォルト状態では、LAN内にDHCPサーバーがあると、IPアドレスを固定していても、SecondaryのIPアドレスが自動的に割り付けられる。SecondaryのIPアドレスが重複して付与されてもさほど問題ではないが、この対策は下記の通り
sudo nano /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes
を編集する。
8行目の
RUN="yes"

RUN="no"
とする。
これで、強制割付されなくなる。設定後再起動。

(2)必要なパッケージ導入
sudo apt-get install eject wvdial iptables-persistent

(3)wvdial.conf編集
sudo nano /etc/wvdial.conf
を下記の内容に修正する。

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Init3 = AT+CGDCONT=1,"IP","dream.jp"
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
Modem = /dev/ttyACM0
ISDN = 0
Phone = *99***1#
APN = dream.jp
Username = user@dream.jp
Password = dti
Carrier Check = no
Auto DNS = 1
Check Def Route = 1

(4)sysctl.conf編集
sudo nano /etc/sysctl.conf
を修正する。
28行目付近
net.ipv4.ip_forward=1
(#を取る)
sudo reboot
または
sudo sysctl -p
で反映させる。

(5)iptablesを設定
次のコマンド画面に打ち込む
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo iptables -A FORWARD -i ppp0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i br0 -o ppp0 -j ACCEPT

iptables-persistentへ保管する。
実際には、
/etc/iptables/rules.v4に保管される
su
でrootになって
iptables-save > /etc/iptables/rules.v4
exit
でrootを脱する。
再起動後には、このiptablesの設定が自動的に反映するようになる。

(6)/etc/network/interfacesの編集
Jessieでは、eth0など実態のあるNICのIPアドレス固定は、/etc/dhcpcd.confに記述するが、br0のような仮想NICなどは、従来通りinterfacesに記載する。
-------
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.190.150
netmask 255.255.255.0
network 192.168.190.0
broadcast 192.168.190.255
gateway 192.168.190.150
dns-nameservers 192.168.190.150 192.168.190.1 202.231.208.73 202.231.208.74 8.8.8.8 8.8.4.4
bridge_ports eth0
bridge_maxwait 10
--------
これで、起動時に、br0とeth0がブリッジした状態で立ち上がるようになる。

(7)vpnclientのアカウント作成ほか
softether vpnの接続アカウントの作成などが整備された状態で、
sudo /usr/local/vpnclient/vpnclient start
sudo /usr/local/vpnclient/vpncmd /client localhost /cmd accountconnect (接続名)
これで仮想NICがvpnサーバーに接続される。仮想nicには、ipアドレスは付与しない。
sudo /sbin/brctl addif br0 vpn_(仮想nic名)
でbr0と仮想NICをブリッジさせる。
これで、eth0と仮想nicがbr0を介して接続された。
bridge接続もほぼ同じ方法となる。
ただし、client接続の場合は、raspbery pi以外2台までeth0に接続したLAN機器がvpnサーバーに接続できるのが、bridge接続都の違いである。
実際には、スクリプト化して、起動時に自動でvpn接続するように設定する。

(8)ppp接続のスクリプト

スクリプト名は任意だが、下記のようなスクリプトを用意する。
書き込み後実行権限を付与する。
----
#!/bin/sh

br0_address="192.168.190.150"
echo "ppp_connect_log\n" > /home/tri/testppp

ifconfig | grep 'br0' > /dev/null 2>&1
if [ $? -eq 0 ] ; then
ip_br0=`LANG=C ifconfig | grep 'inet addr' | grep -v 169 | grep -v 127 | grep -v 100 | awk '{print $2;}' | cut -d: -f2`
test $ip_br0 = $br0_address
if [ $? -ne 0 ] ; then
ifconfig br0 $br0_address
fi
while :
do

lsusb | grep '1004:6124' > /dev/null 2>&1
if [ $? -eq 0 ] ; then
wvdial & 2>&1
sleep 10
fi

lsusb | grep '1004:613a' > /dev/null 2>&1
sleep 1
eject /dev/sr0 > /dev/null 2>&1
sleep 5
wvdial & 2>&1
sleep 10
fi
count=0

while :
do
loop=0
ifconfig | grep 'ppp0' > /dev/null 2>&1
if [ $? -eq 0 ] ; then
ip_ppp0=`ip addr list ppp0 | grep 'inet' | grep -v 169 | grep -v 127 | awk '{print $2;}' | cut -d: -f2`
route add default gw $ip_ppp0 dev ppp0
sleep 2
while :
do
loop=0
ping -c 5 -n -w 10 8.8.8.8 > /dev/null 2>&1
if [ $? -ne 0 ]; then
lsusb | grep '1004:6124' > /dev/null 2>&1
if [ $? -eq 0 ]; then
loop=1
break
else
lsusb | grep '1004:613a' > /dev/null 2>&1
if [ $? -eq 0 ]; then
loop=2
break
else
loop=3
break
fi
fi
fi
sleep 15
done
else
sleep 15
count=$(($count + 1))
if [ $count -gt 2 ] ; then
loop=1
fi
fi

if [ $loop -eq 1 ] ; then
wvdial & 2>&1
sleep 10
fi
if [ $loop -eq 2 ] ; then
eject /dev/sr0 > /dev/null 2>&1
sleep 5
wvdial & 2>&1
sleep 10
fi
if [ $loop -eq 3 ] ; then
sleep 15
break
fi
done
sleep 5
done
else
reboot
fi
exit 0
-----------

かなり書き込んだ。実際にppp接続させようとすると、いろいろなエラーが発生したので、これらのエラーが発生しても、pppを成功させるために工夫した。

(9) (8)のスクリプトをsupervisorに登録する。

(8)のスクリプトは無限ループになるので、これをデーモン化しておく。

以上で、DHCP機能のない有線ルータがraspberry piの中につくることができる。
iptablesの設定は非常に貧弱だが、トーンモバイルから付与されるIPアドレスは
100.で始まるシェアードIP(プライベートIP)なので、WAN側から直接アクセスされることはまずもってない。
だから、VPNを構築して、LANに取り込むことで、アクセスを可能とするというわけである。






posted by bmasterna at 14:58| Comment(2) | 遠隔監視装置

2016年04月23日

vsftpd3.0.2 FTPS化

最近、let's encryptというサイトで、サーバの認証証明書が無料で入手できるようになったので、この証明書を利用して、vsftpdをftps化してみた。

vsftpdのバージョンは3.0.2
証明書は、入手済であるとすると、

sudo cp /etc/vspftpd.conf /etc/vstpd.conf.back
とバックアップしておいてから
sudo nano /etc/vsftpd.conf
にて、次のように書き換える

------ここから
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/letsencrypt/live/(サーバのドメイン名)/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/(サーバのドメイン名)/privkey.pem
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
log_ftp_protocol=NO
vsftpd_log_file=/var/log/vsftpd.log
dual_log_enable=YES
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pasv_enable=YES
pasv_min_port=(tcp49513〜65535の連続する5-10ポートを指定する)
pasv_max_port= (tcp49513〜65535の連続する5-10ポートを指定する)
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
--------ここまで
ここで、
sudo service vsftpd restart

sudo /etc/init.d/vsftpd restart
で再起動する。
ルータを設定して、
Passive用のTCPポートを開けて、FTPSサーバへフォワードする。

sslを有効化したこと、現在主流のtls ver 1のみ対応
サーバー証明書、秘密鍵ファイルの位置をlet's encryptの証明書へのシンボリックリンクを直接見るように設定
rsa_cert_file= では、サーバー証明書を提示することになっているが、
必ず、サーバー証明書+中間証明書の入っている fullchain.pem
を指定する。
もちろん、サーバー証明書である cert.pem
を指定しても、ftpsは有効になるが、
別のパソコンからlftpにでクライアント接続するときに怒られる。
lttp -u ユーザ名,パスワード ftpsサイト名
でログインすると
Certificate Verfication : Not trust
(証明書がインチキ)と表示。
これはこれで、
/etc/lftp.conf
の最下行に
set ssl:verify-certificate no
と記述すれば回避できるが、最初から、 fullchain.pemを指定した方が、いいに決まっている。

lftpのパッケージが導入されていない場合には、
sudo apt-get install lftp
にて導入する。
なお、FTPSサーバは、従来のFTPコマンドでは繋がらなくなる。

WindowsのFFFTPなどのFTPクライアントを
暗号化なしを無効化、FTPS Explicitを有効化、FTPS implicitを無効化、パッシブモードを有効化して
接続できるか確認する。

posted by bmasterna at 09:20| Comment(0) | 日記