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 で接続できるようになりました。