Huawei E8231 とロケットモバイル神プラン(エントリーパッケージ)を組み合わせて、FreeBSDの回線が切れたとき用のサブ接続を用意します。
ストレージとして認識されてしまうので usb_modeswitch でNICとして認識できるようにします。
下の例では echo "net.fibs=4" >> /boot/loader.conf などとして、ルーティングテーブルを複数持てるようにしています。
% dmesg
...
ugen0.6: <HUAWEI> at usbus0
umass0: <Mass Storage> on usbus0
umass0: SCSI over Bulk-Only; quirks = 0x0100
umass0:3:0: Attached to scbus3
cd0 at umass-sim0 bus 0 scbus3 target 0 lun 0
cd0: <HUAWEI Mass Storage 2.31> Removable CD-ROM SCSI-2 device
cd0: Serial Number FFFFFFFFFFFFFFFF
cd0: 40.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present
cd0: quirks=0x10<10_BYTE_ONLY>
% usbconfig
...
ugen0.6: <HUAWEI Mobile HUAWEI> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
% usbconfig -d ugen0.6 dump_device_desc
...
ugen0.6: <HUAWEI Mobile HUAWEI> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (500mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0200
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x00ff
bMaxPacketSize0 = 0x0040
idVendor = 0x12d1
idProduct = 0x1f01
bcdDevice = 0x0102
iManufacturer = 0x0001 <HUAWEI>
iProduct = 0x0002 <HUAWEI Mobile>
iSerialNumber = 0x0003 <FFFFFFFFFFFFFFFF>
bNumConfigurations = 0x0001
% usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000101000100000000000000'
% ifconfig ue0
ue0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 00:1e:xx:xx:00:00
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
% dhclient ue0
DHCPDISCOVER on ue0 to 255.255.255.255 port 67 interval 8
DHCPOFFER from 192.168.8.1
DHCPREQUEST on ue0 to 255.255.255.255 port 67
DHCPACK from 192.168.8.1
bound to 192.168.8.100 -- renewal in 43200 seconds.
% setfib 1 route add default 192.168.8.1
% setfib 1 ping 8.8.8.8
http://192.168.8.1/ にアクセスすると管理画面が表示されます。
コネクション毎にIPが変わるようなので、autosshを使ってコネクションを張るようにしておきます。
次のようにして Huawei E8231 を挿すだけで、張れるようになりました。
% cat /etc/devd/huawei.conf
attach 100 {
match "vendor" "0x12d1";
match "product" "0x1f01";
action "/etc/devd/huawei_e8231.pl";
};
% cat /etc/devd/huawei_e8231.pl
#!/usr/local/bin/perl
use strict;
use feature ":5.10";
$|=1;
my @cmd = (
"/usr/local/sbin/usb_modeswitch -v 12d1 -p 1f01 -M '55534243123456780000000000000011062000000101000100000000000000'",
q|perl -E '$try=10; while ($try--) { system("ifconfig ue0 > /dev/null")==0 ? exit 0 : sleep 1 } exit 256'|,
"dhclient ue0",
"setfib 1 route add default 192.168.8.1",
"setfib 1 service autossh_sub restart",
);
for (@cmd) {
say "--> $_";
my $ret = system($_);
if ($ret == 0) {
next;
}
else {
say "failed. ret: $ret";
exit 256;
}
}
say "succeeded.";
exit 0;
% cat /usr/local/etc/rc.d/autossh_sub
#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: autossh_sub
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
. /etc/rc.subr
name=autossh_sub
rcvar=autossh_sub_enable
: ${autossh_sub_enable:="NO"}
start_cmd=autossh_sub_start
pidfile="/var/run/autossh_sub.pid"
extra_commands="status"
procname="autossh"
autossh_sub_start() {
AUTOSSH_PIDFILE=$pidfile AUTOSSH_POLL=10 setfib 1 /usr/local/bin/autossh -f -M 12346 you@yourvps.jp -R 12345:127.0.0.1:22 -i /home/you/.ssh/id_rsa.plain -o "StrictHostKeyChecking no" -N
}
load_rc_config $name
run_rc_command $1
% sysrc autossh_sub_enable=YES
% service devd restart
yourvps.jp から ssh -p 12345 localhost で接続できるようになりました。

コメントする