Softether VPN Server のVPN(L2TP/IPsec)にMacから接続できない[サーバーとの接続が確立ができません]

リモートワークに伴い、事務所のPCへのリモートアクセスだけでは不便なので、VPN(L2TP/IPsec)のVPNサーバーを構築しました。

UbuntuのサーバーにSoftetherをインストールして、WindowsのVPN サーバー管理マネージャーから設定しました。

Mac用のVPN サーバー管理マネージャ ーもあるのですが、起動しない?ので急ぎでほしいので一旦Windowsで設定しました。

https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/1

設定は完了しているのですが、macにVPNを設定して接続しても「サーバーとの接続が確立ができません」と出てしまうので、CUIから設定します。

# ./vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.34 Build 9745   (English)
Compiled 2020/04/05 23:39:56 by buildsan at crosswin
Copyright (c) SoftEther VPN Project. All Rights Reserved.

By using vpncmd program, the following can be achieved.

1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 1

Specify the host name or IP address of the computer that the destination VPN Server or VPN Bridge is operating on.
By specifying according to the format 'host name:port number', you can also specify the port number.
(When the port number is unspecified, 443 is used.)
If nothing is input and the Enter key is pressed, the connection will be made to the port number 8888 of localhost (this computer).
Hostname of IP Address of Destination:未入力でエンター

If connecting to the server by Virtual Hub Admin Mode, please input the Virtual Hub name.
If connecting by server admin mode, please press Enter without inputting anything.
Specify Virtual Hub Name:未入力でエンター
Password: ********GUIのツールで入れた管理パスワード

VPN Server>HubList
HubList command - Get List of Virtual Hubs
Item              |Value
------------------+-------------------
Virtual Hub Name  |VPN ( GUIで作成したHubが表示される )
Status            |Online
Type              |Standalone
Users             |1
Groups            |0
Sessions          |0
MAC Tables        |0
IP Tables         |0
Num Logins        |0
Last Login        |2020-04-07 17:25:03
Last Communication|2020-04-07 17:25:04
Transfer Bytes    |7,077
Transfer Packets  |21
The command completed successfully.
VPN Server>UserList
UserList command - Get List of Users
Before executing this command, first select the Virtual Hub to manage using the Hub command.
VPN Server>HUB VPN ハブを選んでから
VPN Server/VPN>UserList
UserList command - Get List of Users
Item            |Value
----------------+-------------------------
User Name       |dp-user
Full Name       |dp-user
Group Name      |-
Description     |
Auth Method     |Password Authentication
Num Logins      |0
Last Login      |2020-04-07 (Tue) 17:25:03
Expiration Date |No Expiration
Transfer Bytes  |7,077
Transfer Packets|7,077
The command completed successfully.

VPN Server/VPN>IPsecEnable
IPsecEnable command - Enable or Disable IPsec VPN Server Function
Enable L2TP over IPsec Server Function (yes / no): yes

Enable Raw L2TP Server Function (yes / no): no

Enable EtherIP / L2TPv3 over IPsec Server Function (yes / no): no

Pre Shared Key for IPsec (Recommended: 9 letters at maximum): xxyba

Default Virtual HUB in a case of omitting the HUB on the Username: VPN

The command completed successfully.

VPN Server/VPN>
VPN Server/VPN>SecureNatEnable
SecureNatEnable command - Enable the Virtual NAT and DHCP Server Function (SecureNat Function)
The command completed successfully.

VPN Server/VPN>

最後のSecureNatEnableがキモで、これでMacから接続が出来るようになりました

UbuntuにSoftEther VPN Serverをインストールしようとしたら/runのサイズ不足エラー(Failed to reload daemon: Refusing to reload)

リモートワークで事務所にあるPCを踏み台にしていましたが、事務所のネットが安定しないので、念の為もう一台別でVPNサーバーを準備しようと思い、開発サーバーにしていたConohaVPSの512MBプランにインストールしましたが、systemctlのサービス登録でエラーがでました。

Failed to reload daemon: Refusing to reload, not enough space available on /run/systemd. Currently, 15.3M are free, but a safety buffer of 16.0M is enforced.

root@oreno-dev-server:/var# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            211M     0  211M   0% /dev
tmpfs            49M   33M   16M  69% /run
/dev/vda2        20G   11G  8.1G  57% /
tmpfs           241M     0  241M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           241M     0  241M   0% /sys/fs/cgroup
tmpfs            49M     0   49M   0% /run/user/0
/dev/loop1       92M   92M     0 100% /snap/core/8592
/dev/loop2       92M   92M     0 100% /snap/core/8689
root@crypt-webdb-dev:/var#

メインメモリが512Mなので動的に49Mなんですかね、fstabには指定がなかった。

root@oreno-dev-server:/var# ls -lah /tmp/
total 5.3M
drwxrwxrwt  9 root root 4.0K Apr  7 15:51 .
drwxr-xr-x 23 root root 4.0K Mar 18 06:35 ..
drwxrwxrwt  2 root root 4.0K Jun 20  2019 .ICE-unix
drwxrwxrwt  2 root root 4.0K Jun 20  2019 .Test-unix
drwxrwxrwt  2 root root 4.0K Jun 20  2019 .X11-unix
drwxrwxrwt  2 root root 4.0K Jun 20  2019 .XIM-unix
drwxrwxrwt  2 root root 4.0K Jun 20  2019 .font-unix
-rw-------  1 root root 2.7M Apr  7 14:33 .unicode_cache_225fcb7e.dat
-rw-------  1 root root 2.6M Apr  7 14:04 .unicode_cache_85d392aa.dat

tempfsのサイズ的にはデカいdatファイル”.unicode_cache”がある。ぐぐるとSoftEtherのキャッシュファイル?一旦削除してサービス登録だけ終わらせます。

佐川急便を装ったSMSスパムが届いて謎のAPK(ウィルスアプリ?)をダウンロードを手に入れたのでAndroidStudioでAPKを解析してみる

SMSが080の携帯番号から届いき、開いてみたら「お客様宛にお荷物のお届けがありましたが、不在の為持ち帰りました。下記よりご確認ください http://nehsu.com」とあり、アマゾンデリバリープロバイダーはシステムの関係で080から来るのか?などいろいろ考えましたが、ドメインも変なんで好奇心に負けてクリックしました。

記載のドメインにはアクセスしないでください、後述する変なapk(多分ウィルス)が落ちてきます。

アクセスすると、リダイレクトされてまんま佐川のコピーサイト( asxvz.xyz )に着地します。

ぱっとみは良くできたコピーサイトですが、さっそくsagawa6.5.8.apkが落ちてきます。

sagawa6.5.8.apkの中ですが、com.fkpc.exjjというパッケージでバージョンコードは「32321」と結構アップデートあるみたいです。

権限はてんこ盛りです。

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="razjol.toyiac.fhvydtoj" />
    <uses-permission android:name="wruqaloi.mnqrnd.ewnucr" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_MMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

怖くて起動はしてないけど、stringsに佐川急便の文字がある。

classes.dexはあとでゆっくり覗いてみる。

RaspberryPi B+のIPを探す – Raspbian ヘッドレスインストール

我が家はデスクトップはiMacのみで、モニターやキーボードを準備するのが面倒なのでRaspberryPiのセットアップはいつもヘッドレスで行っています。

sshファイルとwpa_supplicant.confの設定してbonjourかarpの一覧表示でIPを調べられます。

RC211v-mbp:Downloads dp$ ping raspberrypi.local
PING raspberrypi.local (192.168.1.39): 56 data bytes
64 bytes from 192.168.1.39: icmp_seq=0 ttl=64 time=3.794 ms
64 bytes from 192.168.1.39: icmp_seq=1 ttl=64 time=3.411 ms
^C
--- raspberrypi.local ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 3.411/3.603/3.794/0.192 ms
RC211v-mbp:Downloads dp$



RC211v-mbp:Downloads dp$arp -a
? (169.254.118.171) at b8:27:eb:97:d6:6d on en0 [ethernet]
? (192.168.1.1) at e4:7e:66:34:1b:58 on en0 ifscope [ethernet]
? (192.168.1.6) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.7) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.8) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.9) at 18:65:90:d0:51:5 on en0 ifscope permanent [ethernet]
? (192.168.1.10) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.11) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.12) at f0:81:73:98:aa:5b on en0 ifscope [ethernet]
? (192.168.1.13) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.14) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.15) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.16) at (incomplete) on en0 ifscope [ethernet]
? (192.168.1.22) at 7c:61:66:da:d7:41 on en0 ifscope [ethernet]
? (192.168.1.39) at b8:27:eb:97:d6:6d on en0 ifscope [ethernet]
? (192.168.1.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]

PHP Eloquentで既存のPDOを利用する – 既存プロジェクトにEloquent追加

既存の独自フレームワークに新しい機能を追加する機会があり、DB周りを確認したのですが、PDOをゴリゴリに使っており、サニタイズも独自だったのでせめて追加の部分はライブラリ(Eloquent)を利用して安全にしたいと思いましたが、追加分の為にフィルター系の処理をEloquentで別で作って管理するのは別の題もあるので、PDOは残しつつ、Eloquentを利用しようとおもいます。

が、 PDOと別でEloquentでコネクションを作るのはトラブルの元なので、既存処理で接続状態になっているPDOを利用します。

いつもだと

$capsule = new Capsule;
$capsule->addConnection([
	'driver' => 'mysql',
	'host' => 'db.local',
	'database' => 'test',
	'username' => 'db_test',
	'password' => 'pass0000',
	'charset' => 'utf8',
	'collation' => 'utf8_unicode_ci',
	'prefix' => '',
]);
$capsule->setAsGlobal();
$capsule->bootEloquent();

上記の様にEloquent単体で利用する場合は、Capsuleを初期化してますが今回は既存のPDOがあるので、下記の様にしてMySqlConnectionを生成してEloquentのModelに渡します。

$existPDO = 既存のPDOオブジェクトを取得();
$mySqlCon = new MySqlConnection($existPDO);
$resolver = new ConnectionResolver([$mySqlCon]);
$resolver->setDefaultConnection(0);
Model::setConnectionResolver($resolver);

上記でSELECTは動作したのですが、Eloquent Modelでsaveが動きませんでした。EloquentのQueryLogを確認しても問題ないクエリですし、エラーも出ません。save()の戻りもtrue。。

試しにEloquentのモデル側でconnectionをdefault指定したのですが、queryエラーが出たので、どうやらsetDefaultConnection(0)では更新時には’default’として働かない?ようなので、下記に変更しました。


$mySqlCon = new MySqlConnection($existPDO);
$resolver = new ConnectionResolver();
$resolver->addConnection('default', $mySqlCon);
$resolver->setDefaultConnection('default');
Model::setConnectionResolver($resolver);

YDLIDAR X2Lを買ってみた( ROSに接続前にWindowsで動作チェック)

ROSでSLAMやりたいので、YDLIDAR X2を購入しました。

YDLIDAR X4はレビューをよく見るのですが、X2Lって(X2と違う?)機種を見つけてX4でもリーズナブルなんですが、さらにサンプリングレートと範囲がさがってるお手軽版のようなので買ってみました。

YDLIDAR X2L

  • スキャン範囲:半径8 m
  • サンプリングレート:3000 Hz
  • 8500円くらい

YDLIDAR X4

  • スキャン範囲:半径10 m
  • サンプリングレート:5000 Hz
  • 12,000 円くらい

スイッチサイエンスは在庫切れになってたので、送料込みでほとんど変わらないのでAmazonで購入しました。

まずは、初期不良は嫌なので、とりあえずparallels desktopで実行しているWindows10で簡単な動作だけチェックしました。

YDLIDAR X2Lのソフトウェア

YDLIDAR X2( L付 )のソフトウェアですが、なぜか公式サイトでX2を選んでSoftをクリックすると、404にリダイレクトされるですが、下記のマニュアルにファームのリンクはありました。

また、PointCloudViewerはX2でもX4でも一緒で起動時に機種を選択するので、YDLIDARX4のリンクからダウンロードしました。

YDLIDAR X2( L付 )のファームウェアダウンロードリンク

YDLIDAR X2のマニュアルダウンロードリンク

Twilio+ngrok Twilio番号に着信があった場合のWebhookのREQUEST (A CALL COMES IN)

Twilioを利用する必要が出たので、ドキュメントを見ながらAPIなどを確認中

いろいろ機能はあるけど、まずは基本の部分を見てみる。
LINEボットなどと同様にTwilioのconsoleから着信時にHTTPのWebhookを設定できるので、サーバーにおいてもいいけど、ngrokが楽だよとドキュメントにもあるので、利用してみる。

ngrokにアカウント登録して、実行するとngrok.ioのサブドメインへのアクセスを実行してるローカルマシンの8000にフォワードしてくれる。

ngrok by @inconshreveable                                       (Ctrl+C to quit)

Session Status                online
Account                       droid (Plan: Free)
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://704be30b.ngrok.io -> http://localhost:8000
Forwarding                    https://704be30b.ngrok.io -> http://localhost:8000

なので、上記でいう「http://704be30b.ngrok.io」を公開URLとして、
Twilioのコンソールで
http://704be30b.ngrok.io/callback.php
を「Programmable Voice」の「受電したい番号」から「A CALL COMES IN」のWebhookURLを設定

?php
// パラメータが見たいだけなので、TwilioSDKは今回不要
error_log(print_r($_REQUEST, true));

上記に加えて受信スクリプトを配置した場所で実行して、Twilioの番号に電話をかける

RC211v:app dp$ php -S localhost:8000
PHP 7.3.5 Development Server started at Fri Jan 24 12:53:18 2020
Listening on http://localhost:8000
Document root is /Users/dp/projects/twilio/app
Press Ctrl-C to quit.
[Fri Jan 24 12:54:13 2020] [::1]:62430 [200]: /callback.php
[Fri Jan 24 12:56:26 2020] Array
(
    [Called] => +125647****Twilioで取得した受電番号
    [ToState] => AL
    [CallerCountry] => JP
    [Direction] => inbound
    [CallerState] =>
    [ToZip] => 35739
    [CallSid] => CA7f52ed3ec************************
    [To] => +125647****Twilioで取得した受電番号
    [CallerZip] =>
    [ToCountry] => US
    [ApiVersion] => 2010-04-01
    [CalledZip] => 35739
    [CalledCity] => ELKMONT
    [CallStatus] => ringing
    [From] => +81801234発信者番号
    [AccountSid] => AC31a5******************************
    [CalledCountry] => US
    [CallerCity] =>
    [Caller] => +81801234発信者番号
    [FromCountry] => JP
    [ToCity] => ELKMONT
    [FromCity] =>
    [CalledState] => AL
    [FromZip] =>
    [FromState] =>
)

カンファレンスなどでFromを判定したりするには、$_REQUESTのformなどを元にすればいいということか。

–>

pyenvで3.7.xのインストールでエラー( ModuleNotFoundError: No module named ‘_ctypes’)

ROS2の環境構築でpyenvで3.7.xをインストールしようとしたらエラーが発生
最小インストール後に、mac用のWifiドライバーなどを軽く入れたくらいなので、ライブラリが足りなかった。

droid@rc211v-usb:~$ pyenv install 3.7.4
Downloading Python-3.7.4.tar.xz...
-> https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz
Installing Python-3.7.4...

BUILD FAILED (Ubuntu 18.04 using python-build 1.2.16)

Inspect or clean up the working tree at /tmp/python-build.20200109175000.3042
Results logged to /tmp/python-build.20200109175000.3042.log

Last 10 log lines:
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 20, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 37, in 
  File "/tmp/tmpge7ufapu/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in 
  File "/tmp/python-build.20200109175000.3042/Python-3.7.4/Lib/ctypes/__init__.py", line 7, in 
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
Makefile:1132: recipe for target 'install' failed
make: *** [install] Error 1
droid@rc211v-usb:~$ sudo apt install libffi-dev

PHPでBOMを削除 ( remove \xEF\xBB\xBF | U+FEFF | efbbbf)

LINE messaging APIでTextファイルを受信した際に、BOMがついており先頭の空白削除がうまく動作しなかったので、PHPでUTF8のBOMを削除する方法がいくつかあったのでメモ

preg_replaceで削除するパターン
今回はこっちを使って削除

return preg_replace("/^\xEF\xBB\xBF/", '', $text);

U+FEFFで指定するパターン

$str = preg_replace('/\x{FEFF}/u', '', $file);

hexで削除するパターン

function remove_utf8_bom_head($text) {
    if(substr(bin2hex($text), 0, 6) === 'efbbbf') {
        $text = substr($text, 3);
    }
    return $text;
}

PHPでBOM削除で検索すると、自分が前に公開していたJSONから削除する記事が上位に表示され恥ずかしい。

https://stackoverflow.com/questions/10290849/how-to-remove-multiple-utf-8-bom-sequences

Vue.js Bootstrap4のd-flexはv-showで表示/非表示が制御出来ない(flex!important)

既存のBootstrap4&Jqueryなサイトでちょっと凝った制御が必要になって、Jqueryでjavascriptとdom側の両方を制御するのが辛くなったので部分的にVueを導入してみま
した。

d-flexのdivをv-showで制御する予定が、常に表示されてしまう。

< div v-show="showInfo" class="d-flex justify-content-around">
 表示されちゃう。
< /div>

以前AngulerJSでも似たことがあって、CSSをみてみたらimportantが設定されてる。
v-showはelementStyleでnoneつけてるけど、importantに負けてるので常に表示になってしまった。

.d-flex {
    display: -ms-flexbox!important;
    display: flex!important;
}

今回はrefから参照したい都合でvue-ifで消したくないので、d-flexをdivで囲って回避しました。