IKEv2 eap-tlsで接続

以前にEAP-MSCHAPv2の設定をしたのですが、クライアントの証明書は必要ないことに気がついたのでEAP-TLSの設定をしました。クライアントを全部EAP-TLSで設定できればいいのですが、Linuxのstrongswan-nm(Network Manager)ではPUBKEYとEAP-MSCHAPv2とほかいくつかのマイナーなプロトコルしかつかえないので、PUBKEYを使うことにして、ほか、ルータ、armbianやWin/MACはEAP-TLSを使えるようにしました。

Server

/etc/ipsec.conf

config setup
 cachecrls=no
 strictcrlpolicy=no

conn %default
  ikelifetime=60m
  keylife=20m
  rekeymargin=3m
  keyingtries=1
  keyexchange=ikev2

# EAP-tls for Windows and macOS
 conn client-winmac
  left=myserver.com
  leftid=@myserver.com
  leftsourceip=%config
  leftcert=server@myserver.crt
  leftauth=pubkey
  leftfirewall=yes
  leftsubnet=0.0.0.0/0
  #leftsubnet=1.2.3.4/32
  right=%any
  rightid2=@myserver.com
  rightsourceip=192.168.100.0/27
  #rightauth=eap-mschapv2
  rightauth=eap-tls
  rightsendcert=never
  ike=aes128-sha256-modp2048!
  esp=aes128-sha256-modp2048!
  dpdaction=clear
  dpddelay=300s
  rekey=no
  reauth=no
  type = tunnel
  fragmentation=yes
  #eap_identity=%any
  rightfirewall=yes
  auto=add

/etc/ipsec.secrets

: RSA server@mysever.pem
#carol : EAP "abc123"

Client

/etc/ipsec.conf

config setup

conn %default
 ikelifetime=60m
 keylife=20m
 rekeymargin=3m
 keyingtries=1
 keyexchange=ikev2

# EAP for client
conn srv-client
 leftsourceip=%config
 leftcert=srv@myclient.crt
 leftid=@myclient
 #leftauth=eap-mschapv2
 leftauth=eap
 leftfirewall=yes
 right=myserver.com
 rightid2=server@myserver.com
 #rightsubnet=1.2.3.4/32
 rightsubnet=0.0.0.0/0
 rightauth=any
 #eap_identity=carol
 dpdaction=clear
 #dpdaction=restart
 #dpddelay=300s
 type = tunnel
 rekey=no
 reauth=no
 #rekey=yes
 #reauth=yes
 #fragmentation=yes
 ike=aes128-sha256-modp2048!
 esp=aes128-sha256-modp2048!
 auto=start

/etc/ipsec.secrets

: RSA srv@myclient.pem "xyz9876"
#carol : EAP "abc123"

Revocation Listの作成

いつも使っている手抜きのxcaを使ってリボーケーションリストを作成します。

DNSの変更

vpnでDNSを切り替えたかったが、nameserver 127.0.0.53のままで切り替わらなかったので次のようにしました。最善の解決策かどうかわかりませんが。

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service
apt install resolvconf
nano /etc/resolvconf/resolv.conf.d/tail
sytemctl enable resolvconf
sytemctl restart resolvconf

VPSのお引越し

ablenet VPSの更新日が来たので止めるか更新するか迷ってましたが、SSDで更新することにしました。今までのVPSは4年位使っていて、性能が相対的に見劣りしてきたのと、プログラムがかなり遅くなってストレスを感じたこともあって、自宅のサーバを強化したほうがメリットがあるという状況での選択になりました。自宅サーバは動的IPアドレスなので、途切れないようにするのがまた大変ですが、天秤にかけた結果なので受け入れるしかありません。データベースを走らせるとメモリの増強が必要になりVPSだと割高になってしまいます。メモリを増強しなければスワップを使うのでシステム全体が遅くなって使えないという状況になります。

自宅サーバを強化しようと思ったのは、前回の記事にも書きましたが、TV BOXに入れたarmbianがなかなか使えるということがありました。TV BOXは省エネのわりにインテルPCにかなわないものの高性能です。

引っ越しが一段落ついたので、新旧の性能を比較してみました。驚いたことに性能が倍も違いました。CPUがかなり良くなっていました。以下、結果を掲載します。

旧VPS)

stress-ng --cpu 1 --cpu-method matrixprod  --metrics-brief --perf -t 60
stress-ng: info:  [18708] dispatching hogs: 1 cpu
stress-ng: info:  [18708] successful run completed in 60.32s (1 min, 0.32 secs)
stress-ng: info:  [18708] stressor       bogo ops real time  usr time  sys time   bogo ops/s   bogo ops/s
stress-ng: info:  [18708]                           (secs)    (secs)    (secs)   (real time) (usr+sys time)
stress-ng: info:  [18708] cpu                6188     60.32     56.74      1.47       102.59       106.30
stress-ng: info:  [18708] cpu:
stress-ng: info:  [18708]             58,545,714,621 CPU Clock                       0.97 B/sec
stress-ng: info:  [18708]             58,559,574,231 Task Clock                      0.97 B/sec
stress-ng: info:  [18708]                        195 Page Faults Total               3.23 /sec 
stress-ng: info:  [18708]                        195 Page Faults Minor               3.23 /sec 
stress-ng: info:  [18708]                          0 Page Faults Major               0.00 /sec 
stress-ng: info:  [18708]                      8,008 Context Switches              132.76 /sec 
stress-ng: info:  [18708]                          0 CPU Migrations                  0.00 /sec 
stress-ng: info:  [18708]                          0 Alignment Faults                0.00 /sec 
stress-ng: info:  [18708]                          0 Emulation Faults                0.00 /sec 
stress-ng: info:  [18708]                        194 Page Faults User                3.22 /sec 
stress-ng: info:  [18708]                          1 Page Faults Kernel              0.02 /sec 
stress-ng: info:  [18708]                         85 System Call Enter               1.41 /sec 
stress-ng: info:  [18708]                         84 System Call Exit                1.39 /sec 
stress-ng: info:  [18708]                          2 TLB Flushes                     0.03 /sec 
stress-ng: info:  [18708]                        519 Kmalloc                         8.60 /sec 
stress-ng: info:  [18708]                      1,340 Kmalloc Node                   22.21 /sec 
stress-ng: info:  [18708]                      2,351 Kfree                          38.98 /sec 
stress-ng: info:  [18708]                     10,316 Kmem Cache Alloc              171.02 /sec 
stress-ng: info:  [18708]                      1,180 Kmem Cache Alloc Node          19.56 /sec 
stress-ng: info:  [18708]                      7,679 Kmem Cache Free               127.30 /sec 
stress-ng: info:  [18708]                        210 MM Page Alloc                   3.48 /sec 
stress-ng: info:  [18708]                        205 MM Page Free                    3.40 /sec 
stress-ng: info:  [18708]                     48,424 RCU Utilization               802.79 /sec 
stress-ng: info:  [18708]                          0 Sched Migrate Task              0.00 /sec 
stress-ng: info:  [18708]                          0 Sched Move NUMA                 0.00 /sec 
stress-ng: info:  [18708]                      8,950 Sched Wakeup                  148.38 /sec 
stress-ng: info:  [18708]                          0 Sched Proc Exec                 0.00 /sec 
stress-ng: info:  [18708]                          0 Sched Proc Exit                 0.00 /sec 
stress-ng: info:  [18708]                          0 Sched Proc Fork                 0.00 /sec 
stress-ng: info:  [18708]                          1 Sched Proc Free                 0.02 /sec 
stress-ng: info:  [18708]                          0 Sched Proc Hang                 0.00 /sec 
stress-ng: info:  [18708]                          0 Sched Proc Wait                 0.00 /sec 
stress-ng: info:  [18708]                      8,008 Sched Switch                  132.76 /sec 
stress-ng: info:  [18708]                         62 Signal Generate                 1.03 /sec 
stress-ng: info:  [18708]                          1 Signal Deliver                  0.02 /sec 
stress-ng: info:  [18708]                     18,477 IRQ Entry                     306.32 /sec 
stress-ng: info:  [18708]                     18,477 IRQ Exit                      306.32 /sec 
stress-ng: info:  [18708]                     22,416 Soft IRQ Entry                371.62 /sec 
stress-ng: info:  [18708]                     22,416 Soft IRQ Exit                 371.62 /sec 
stress-ng: info:  [18708]                          0 Writeback Dirty Inode           0.00 /sec 
stress-ng: info:  [18708]                          0 Writeback Dirty Page            0.00 /sec 
stress-ng: info:  [18708]                          0 Migrate MM Pages                0.00 /sec 
stress-ng: info:  [18708]                      4,874 SKB Consume                    80.80 /sec 
stress-ng: info:  [18708]                      1,353 SKB Kfree                      22.43 /sec 
stress-ng: info:  [18708]                          0 IOMMU IO Page Fault             0.00 /sec 
stress-ng: info:  [18708]                          0 IOMMU Map                       0.00 /sec 
stress-ng: info:  [18708]                          0 IOMMU Unmap                     0.00 /sec
7z b

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz (623),ASM)

Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz (623)
CPU Freq:  1931  1939  2000  1854  1960  1960  1956  2011  2009

RAM size:     483 MB,  # CPU hardware threads:   1
RAM usage:    435 MB,  # Benchmark threads:      1

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       1556    86   1763   1514  |      21931    98   1909   1872
23:       1501    87   1756   1530  |      21476    98   1892   1859
24:       1444    89   1748   1553  |      21001    98   1879   1844

新VPS)

stress-ng --cpu 1 --cpu-method matrixprod  --metrics-brief --perf -t 60
 stress-ng: info:  [11464] dispatching hogs: 1 cpu
 stress-ng: info:  [11464] successful run completed in 60.52s (1 min, 0.52 secs)
 stress-ng: info:  [11464] stressor       bogo ops real time  usr time  sys time   bogo ops/s   bogo ops/s
 stress-ng: info:  11464    (secs)    (secs)   (real time) (usr+sys time)
 stress-ng: info:  [11464] cpu               11793     60.52     59.57      0.22       194.86       197.24
 stress-ng: info:  [11464] cpu:
 stress-ng: info:  [11464]             59,805,848,847 CPU Clock                       0.99 B/sec
 stress-ng: info:  [11464]             59,807,276,902 Task Clock                      0.99 B/sec
 stress-ng: info:  [11464]                        197 Page Faults Total               3.26 /sec 
 stress-ng: info:  [11464]                        197 Page Faults Minor               3.26 /sec 
 stress-ng: info:  [11464]                          0 Page Faults Major               0.00 /sec 
 stress-ng: info:  [11464]                      2,545 Context Switches               42.05 /sec 
 stress-ng: info:  [11464]                          0 CPU Migrations                  0.00 /sec 
 stress-ng: info:  [11464]                          0 Alignment Faults                0.00 /sec 
 stress-ng: info:  [11464]                          0 Emulation Faults                0.00 /sec 
 stress-ng: info:  [11464]                        196 Page Faults User                3.24 /sec 
 stress-ng: info:  [11464]                          1 Page Faults Kernel              0.02 /sec 
 stress-ng: info:  [11464]                         85 System Call Enter               1.40 /sec 
 stress-ng: info:  [11464]                         84 System Call Exit                1.39 /sec 
 stress-ng: info:  [11464]                          2 TLB Flushes                     0.03 /sec 
 stress-ng: info:  [11464]                        152 Kmalloc                         2.51 /sec 
 stress-ng: info:  [11464]                         39 Kmalloc Node                    0.64 /sec 
 stress-ng: info:  [11464]                        722 Kfree                          11.93 /sec 
 stress-ng: info:  [11464]                      2,311 Kmem Cache Alloc               38.18 /sec 
 stress-ng: info:  [11464]                         36 Kmem Cache Alloc Node           0.59 /sec 
 stress-ng: info:  [11464]                      3,061 Kmem Cache Free                50.58 /sec 
 stress-ng: info:  [11464]                        191 MM Page Alloc                   3.16 /sec 
 stress-ng: info:  [11464]                        150 MM Page Free                    2.48 /sec 
 stress-ng: info:  [11464]                     36,352 RCU Utilization               600.65 /sec 
 stress-ng: info:  [11464]                          0 Sched Migrate Task              0.00 /sec 
 stress-ng: info:  [11464]                          0 Sched Move NUMA                 0.00 /sec 
 stress-ng: info:  [11464]                      3,595 Sched Wakeup                   59.40 /sec 
 stress-ng: info:  [11464]                          0 Sched Proc Exec                 0.00 /sec 
 stress-ng: info:  [11464]                          0 Sched Proc Exit                 0.00 /sec 
 stress-ng: info:  [11464]                          0 Sched Proc Fork                 0.00 /sec 
 stress-ng: info:  [11464]                          2 Sched Proc Free                 0.03 /sec 
 stress-ng: info:  [11464]                          0 Sched Proc Hang                 0.00 /sec 
 stress-ng: info:  [11464]                          0 Sched Proc Wait                 0.00 /sec 
 stress-ng: info:  [11464]                      2,545 Sched Switch                   42.05 /sec 
 stress-ng: info:  [11464]                          2 Signal Generate                 0.03 /sec 
 stress-ng: info:  [11464]                          1 Signal Deliver                  0.02 /sec 
 stress-ng: info:  [11464]                      4,422 IRQ Entry                      73.06 /sec 
 stress-ng: info:  [11464]                      4,422 IRQ Exit                       73.06 /sec 
 stress-ng: info:  [11464]                     17,725 Soft IRQ Entry                292.87 /sec 
 stress-ng: info:  [11464]                     17,725 Soft IRQ Exit                 292.87 /sec 
 stress-ng: info:  [11464]                          0 Writeback Dirty Inode           0.00 /sec 
 stress-ng: info:  [11464]                          0 Writeback Dirty Page            0.00 /sec 
 stress-ng: info:  [11464]                          0 Migrate MM Pages                0.00 /sec 
 stress-ng: info:  [11464]                      1,844 SKB Consume                    30.47 /sec 
 stress-ng: info:  [11464]                        423 SKB Kfree                       6.99 /sec 
 stress-ng: info:  [11464]                          0 IOMMU IO Page Fault             0.00 /sec 
 stress-ng: info:  [11464]                          0 IOMMU Map                       0.00 /sec 
 stress-ng: info:  [11464]                          0 IOMMU Unmap                     0.00 /sec
7z b

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz (6FB),ASM)

Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz (6FB)
CPU Freq:  3192  3264  3312  3356  3315  3348  3329  3302  3320

RAM size:     483 MB,  # CPU hardware threads:   1
RAM usage:    435 MB,  # Benchmark threads:      1

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       3155    98   3120   3070  |      39255   100   3359   3352
23:       2923    97   3075   2979  |      38185   100   3311   3305
24:       2641    96   2953   2841  |      37295    99   3302   3274
25: 


ERROR: Can't allocate required memory!

TV BOX

結構健闘しています。

7z b

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,4 CPUs LE)

LE
CPU Freq:  1194  1180  1190  1193  1194  1193  1194  1191  1192

RAM size:    1806 MB,  # CPU hardware threads:   4
RAM usage:    882 MB,  # Benchmark threads:      4

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       1652   270    596   1608  |      37933   292   1108   3236
23:       1641   269    621   1673  |      37199   291   1105   3219
24:       1670   277    649   1796  |      38145   305   1099   3349
25:       1602   282    648   1829  |      35279   287   1095   3140
----------------------------------  | ------------------------------
Avr:             275    628   1726  |              294   1102   3236
Tot:             284    865   2481

VPNの新しいかたち、WireGuardを使ってみる

たまたまアマゾンで検索していたらVPNの使えるモバイルルータというのがあって、口コミを見ていたらWireGuardという聞きなれないVPNがあったので調べてみました。

WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant than OpenVPN.

OpenVPNやStrongSwanより簡単にVPNができるとありました。口コミでも意外と好評でしたのでセットアップしてみました。まずは口コミを実証するためにOpenWrtからです。

OpenWrt

サーバ側は設定ができたらwg-quick up wg0で起動しておきます。

opkg install kmod-wireguard luci-app-wireguard luci-proto-wireguard wireguard wireguard-tools

OpenWrtの場合はダッシュボードですべて設定が可能です。パッケージをインストールしたらダッシュボードでインタフェースのwgを作りプロトコルをwireguradを選択します。 そしてプロトコルを有効にするために一旦リブートします。設定画面の一部ですが次のようになります。InterfaceのWGをZoneのWGに割り当てます。

OpenWrt
OpenWrt

鍵の作り方

鍵は至ってシンプルです。公開鍵と秘密鍵を作ります。

mkdir /etc/wireguard
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey

サーバ側の設定

Firewallの設定でListenPort 51820/udpを開けておきます。

/etc/wireguard/wg0.conf
[Interface]
 PrivateKey = <private key>
 Address = 10.0.0.1/24
 ListenPort = 51820
 [Peer]
 PublicKey = BLwj4cFU1pyZnKRUfaQ+WGILdFMsIRVmGxumbO+VwmM=
 AllowedIPs = 10.0.0.2/32
 [Peer]
 PublicKey = Vhs/vFjnel906nBh7XxvUtIEeYmT3muHbGlvXeA5Hk4=
 AllowedIPs = 10.0.0.60/32
 [Peer]
 PublicKey = Zq5v2tKFzT6T7hPGZSVatLBsy+SI64NvXX242FgaFw4=
 AllowedIPs = 10.0.0.100/32
 [Peer]
 PublicKey = cUrLly4zWa578S9jAyVRnFzdvZQPPsbK8NGpNcbOJnw=
 AllowedIPs = 10.0.0.111/32
 [Peer]
 PublicKey = qGNpf4tdsvMX21g/PU3SSTVZfpQZ6wHKVcFW88IAulE=
 AllowedIPs = 10.0.0.10/32

Debian

Debianはリポジトリを追加してインストールします。WireGuardのモジュールはメインカーネルに含まれいていないのでdkmsでカーネルモジュールを作ります。

echo "deb http://deb.debian.org/debian/ unstable main" | sudo tee /etc/apt/sources.list.d/unstable.list
echo -e "Package: *\nPin: release a=unstable\nPin-Priority: 150\n" | tee /etc/apt/preferences.d/limit-unstable
sudo apt update
sudo apt install wireguard

Ubuntu LTS

Ubuntu LTSもリポジトリを追加してインストールします。

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt install wireguard

LXC

apt-get install --no-install-recommends wireguard-tools

ArchLinux ARM

Chromebook ARMのArchLinuxは以前の記事に書きましたがカーネルの不具合で、ダウングレードしています。ところがローリング・リリースなのでARMは過去のパッケージにアクセスで来ません。そこでビルドするのですが、パッチを使ってバージョンを戻します。

つぎのファイルをダウンロードするのですが、余計なヘッダーがつくので各々のファイルを手動でコピーして作ります。

ログにパッチがあるのでそれを使ってリビジョンを戻します。

カーネルをビルドしてカーネルヘッダーのパッケージのみインストールします。あとはdkmsモジュールをビルド・インストールして完了です。

作成したカーネルヘッダーパッケージと既存カーネルの置き場です。

Android

AndroidはPlay でアプリをインストールします。そこで気がついたのですがこのアプリはユーザランドで動いています。気になったので調べてたらboringtunを使うらしいです。つまりカーネルモジュールが使えない場合の方法があるということです。アンドロイドの設定は次のようにしました。サーバ側で次のように設定してqrencodeを使ってQRコードを表示させます。それをスマホで読み込むと設定が完了します。これは超簡単なのでこれから爆発的に流行りそうな潜在力を秘めています。

foo.conf
[Interface]
 Address = 10.0.0.100/24
 PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
 DNS = 10.0.0.1
 [Peer]
 PublicKey = pGvwDzski+meZWUkm3vHhyxGgtkkdSf9/FFzQofW2gU=
 #PresharedKey = [PRE-SHARED KEY]
 AllowedIPs = 10.0.0.0/24
 Endpoint = example.com:51820
qrencode -t ansiutf8 < foo.conf

サーバ側からテストしてみます。スマホ側からテストするにはターミナルエミュレーターアプリを入れてping -c3 [address]とします。

ping 10.0.0.100
 PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
 64 bytes from 10.0.0.100: icmp_seq=1 ttl=64 time=65.3 ms
 64 bytes from 10.0.0.100: icmp_seq=2 ttl=64 time=66.10 ms

 

Armbian 5.91 (Amls905)

追記:最新版は標準インストールされています

Armbian s9xxは非公式のカーネル5.1が入っており、リポジトリからカーネルヘッダーをダウンロードできません。そこでソースからカーネルをビルドします。

git clone https://github.com/150balbes/Amlogic_s905-kernel.git
git log
git reset --hard 065aff580a3036854bab0a977ab51b5b043367e8
ln -s GIT_DIR linux
ln -s linux $(uname -r)   
ln -s /usr/src/$(uname -r)  /lib/modules/$(uname -r)/build
cd linux
make oldconfig

Makefileを編集します

VERSION = 5
 PATCHLEVEL = 1
 SUBLEVEL = 0
 EXTRAVERSION = -aml-s905

カーネルをビルドします。

meke -j3

ビルドできたらdkmsカーネルモジュールが正しくインストールできるかチェックします。もしできたのならパッケージを作ります。

make bindeb-pkg

どういうわけかvermagicが5.1.0-aml-s905+になって、余計な「+」があるとモジュールが読み込めません。その場合は次のファイルを編集します。これでdkmsカーネルモジュールを作れば動きます。

nano include/generated/utsrelease.h
  #define UTS_RELEASE "5.1.0-aml-s905"
ln -sf  /usr/src/linux-headers-5.1.0-aml-s905+ /lib/modules/5.1.0-aml-s905/build

モジュールの情報です

modinfo wireguard
 filename:       /lib/modules/5.1.0-aml-s905/updates/dkms/wireguard.ko
 alias:          net-pf-16-proto-16-family-wireguard
 alias:          rtnl-link-wireguard
 version:        0.0.20191012
 author:         Jason A. Donenfeld Jason@zx2c4.com
 description:    WireGuard secure network tunnel
 license:        GPL v2
 srcversion:     C04EB24BB0E47CF3D9FEFE7
 depends:        ipv6
 name:           wireguard
 vermagic:       5.1.0-aml-s905 SMP preempt mod_unload aarch64

openVZ

boringtun

openvizはカーネルモジュールにアクセスできないのでユーザーランド方式を使ます。インターフェースはできるものの接続ができませんでした。現在調査中です。=> firewallの問題で解決済みです

sudo echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
sudo printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
sudo apt update
sudo apt-get install --no-install-recommends wireguard-tools
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
mkdir ~/src
cd ~/src
git clone https://github.com/cloudflare/boringtun
cd boringtun
cargo build --bin boringtun --release
cp -a ./target/release/boringtun /usr/local/bin/
#sudo /usr/local/bin/boringtun wg0
sudo boringtun  --disable-multi-queue wg0
wg set wg0 private-key  privatekey  peer "pGvwDzski+meZWUkm3vHhyxGgtkkdSf9/FFzQofW2gU=" allowed-ips  10.0.0.0/24  endpoint 61.195.97.254:51820

インターフェースを起動します。

sudo ip addr add 10.0.0.111/24 dev wg0
sudo ip link set up wg0

wireguard-go

wireguard-goを使う場合、まずgoをインストールします。

wget https://dl.google.com/go/go1.12.6.linux-amd64.tar.gz

ソースをダウンロードしてコンパイルします

git clone https://git.zx2c4.com/wireguard-go

/lib/systemd/system/wg-quick@.serviceを一部変更します

Environment=WG_ENDPOINT_RESOLUTION_RETRIES=infinity
Environment=WG_I_PREFER_BUGGY_USERSPACE_TO_POLISHED_KMOD=1
cd wireguard-go
make
sudo cp wireguard-go /usr/local/bin

起動します

systemctl enable wg-quick@wg0 
systemctl start wg-quick@wg0

サーバの稼働状況

wg
 interface: wg0
   public key: pGvwDzski+meZWUkm3vHhyxGgtkkdSf9/FFzQofW2gU=
   private key: (hidden)
   listening port: 51820
 peer: Vhs/vFjnel906nBh7XxvUtIEeYmT3muHbGlvXeA5Hk4=
   endpoint: 110.66.173.233:51860
   allowed ips: 10.0.0.60/32
   latest handshake: 24 seconds ago
   transfer: 11.59 KiB received, 3.30 KiB sent
 peer: Zq5v2tKFzT6T7hPGZSVatLBsy+SI64NvXX242FgaFw4=
   endpoint: 110.66.173.233:35183
   allowed ips: 10.0.0.100/32
   latest handshake: 51 seconds ago
   transfer: 437.93 KiB received, 516.82 KiB sent
 peer: qGNpf4tdsvMX21g/PU3SSTVZfpQZ6wHKVcFW88IAulE=
   endpoint: 110.66.173.233:51810
   allowed ips: 10.0.0.10/32
   latest handshake: 59 seconds ago
   transfer: 10.77 KiB received, 3.86 KiB sent
 peer: BLwj4cFU1pyZnKRUfaQ+WGILdFMsIRVmGxumbO+VwmM=
   allowed ips: 10.0.0.2/32
 peer: cUrLly4zWa578S9jAyVRnFzdvZQPPsbK8NGpNcbOJnw=
   allowed ips: 10.0.0.111/32

稼働状況はこのようになっています。endpointがないものはサーバに接続ができていません。

以上です。

追記:ルーティング

ルーティングについてちょっとハマったので追記しました。

サーバ側

iptablesに設定を追加します。私はshorewallを使っているのでそこで追加します。ほかもinterfaces, zones, policy, rules等必要な箇所は追加します。shorewallの基本なのでここでは割愛します。

/etc/shorewall/snat

SNAT(61.xx.xx.xx)    10.0.0.0/24     eth0

DNSはVPN内で完結するようにします。DNSが漏れないように設定します。

/etc/shorewall/rules:

#DNS(ACCEPT)    wg      net
DNS(ACCEPT)     wg      $FW

dnsmasqをインストールします。ほかのやり方はちょっと思いつきません。

apt install dnsmasq

/etc/dnsmasq.conf


port=53
resolv-file=/etc/dnsmasq.resolv.conf
listen-address=127.0.0.1, 10.0.0.1
domain=mydomain.tld

/etc/dnsmasq.resolv.conf

nameserver 8.8.8.8
nameserver 1.1.1.1

クライアント側

追記:EndPointはDNSの問い合わせのあるFQDNではなくIPアドレスのほうが好ましい。

apt isntall openresolv
[Interface]
 PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
 Address = 10.0.0.2/24
 ListenPort = 51821
 DNS = 10.0.0.1   # VPN server IP
 
 [Peer]
  PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
  AllowedIPs = 0.0.0.0/0
  EndPoint = example.com:51820
  PersistentKeepAlive = 25

ルーティングはwg-quickがすべてやってくれるので追加はありません。例外的にルーティングを追加する場合です。

[Interface]
 PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
 Address = 10.0.0.2/24
 ListenPort = 51821
 DNS = 10.0.0.1   # VPN server IP
 
 [Peer]
  PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
  AllowedIPs = 0.0.0.0/0
  EndPoint = example.com:51820
  PersistentKeepAlive = 25

例外的に追加する場合はPostUp/Postdownを使います。

[Interface]
 PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
 Address = 10.0.0.2/24
 ListenPort = 51821
 DNS = 10.0.0.1   # VPN server IP
 PostUp = ip route add 10.10.0.0/24 via 192.168.1.1
 Postdown = ip route del 10.10.0.0/24 via 192.168.1.1

 [Peer]
  PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
  AllowedIPs = 0.0.0.0/0
  EndPoint = example.com:51820
  PersistentKeepAlive = 25

Troubleshooting

  • wgコマンドでインターフェースが起動してることを確認する
  • peerのアドレスが0.0.0.0/0の場合、ルーティングをチェックすること。WireGuardが通信できる経路を確保すること。
  • Firewallを見直す。

参考

unattended-upgradesを有効にする

先日、緊急性のあるsudoバグのパッチがリリースされて、自分の管理するコンテナを含むマシーンを10台程度アップデートしました。数か増えると更新するのも大変ですね。コンテナは過去の記事にも書きましたが、overlayfsで重ね合わせているのでベースとなるコンテナをアップデートすれば良いので、作業は少し楽になりますが、大変なことには変わりありません。

作業している中で気がついたのですが、A2ホステキングのサーバだけはすでにアップデート済みでした。不思議に思って調べたのですが、aptが自動的にアップデートしていることがわかりました。

/var/log/apt/history.log

Start-Date: 2019-10-15 06:45:45
Commandline: /usr/bin/unattended-upgrade -d
Upgrade: sudo:amd64 (1.8.19p1-2.1, 1.8.19p1-2.1+deb9u1)
End-Date: 2019-10-15 06:45:45

unattended-upgradeについて調べてみると自動アップデート機能だということです。使い方は次のようにするようです。

apt-get install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades

VLANタグを使ってルータを構築

TV BOX(amlogic s905x)は普段使っているルータに比べて性能は格段に優れているのですが、LANポートが1つしかなくてネットワーク機器には不向きです。一方でルータは十分なLANポートをもっているがCPUスペックが低いです。そのためサービスが多くなるに従って動作が重くなり肝心のネットワークのスループットに影響が出てしまします。実際、IKEv2を使っていてルーターのネットワークのスピードの低下の影響はかなり大きいです。そこでTV BOXにarmbianを入れてルータにしてしまおうというのが今回の趣旨です。

OpenWrt

OpenWrt

Armbian

Armbian

今年の夏にカーネル5.1のarmbianが出て、動かしてみるとかなり実用的であることがわかりました。それでcacti等を動かしていたのですが、まだまだパワーが余っています。ルータのタスクを一部移そうかと検討してたのですが、どうせならルータ化した方が話が早いという結論になりました。LANポートが1つしかないので、VLANタグを付けて、すなわちVLAN多重化してネットワークを分けます。そして旧ルータのVLAN機能のあるHUBと組み合わせて使います。VLAN機能によってかなり自由度の高いネットワークの設計ができます。自分専用のサーバのみならず、DMZを作ってインターネット用にサーバを立てることもできます。

ただし注意することはTV BOXはあくまでもマルチメディア再生機なのでネットワーク部分が弱いです。LANポートは100Mbpsしかないので、コンテナで複数サーバを立てるとネットワークがボトルネックになる可能性があります。ラズパイなどのSoCボードならその点は優れているのですが、熱暴走しないとかシステムの安定性となると製品化された方に優位性があります。それぞれ一長一短があるので使う人次第ということになります。さらにストレージがeMMCなのでHDDやSSDより性能が劣ります。

OpenWrt(旧ルーター)の設定

Vlanのタグをつかってセグメントを分けます。さらにInterfaceとZoneをつくります。

Network>Switch

Network>Interfaces

Network>Firewall

Armbian(新ルータ)の設定

Debian旧来のネットワークの設定をします。一部vlanができないのでブリッジを使ってインターフェースを作りました。

LAN Networkの設定

# source /etc/network/interfaces.d/*
# Network is managed by Network manager
auto lo
iface lo inet loopback

#auto eth0
iface eth0 inet manual

iface eth0.111 inet manual
  vlan-raw-device eth0

iface eth0.333 inet manual
  vlan-raw-device eth0

iface eth0.999 inet manual
  vlan-raw-device eth0

auto br0.111
iface br0.111 inet static
  bridge_ports eth0.111
  address 192.168.1.10
  netmask 255.255.255.0
  broadcast 192.168.1.255
  network 192.168.1.0
  bridge_maxwait 0
  bridge_fd 0
  #bridge_hello 2
  #bridge_maxage 12
  bridge_stp off

auto br0.333
iface br0.333 inet static
  vlan-raw-device eth0
  bridge_ports eth0.333
  address 192.168.10.129
  netmask 255.255.255.128
  broadcast 192.168.10.255
  network 192.168.10.128
  bridge_maxwait 0
  bridge_fd 0
  bridge_stp off

#auto br0.666
#iface br0.666 inet static
auto eth0.666
iface eth0.666 inet static
  vlan-raw-device eth0
  #bridge_ports eth0.666
  address 192.168.10.10
  netmask 255.255.255.128
  broadcast 192.168.10.127
  network 192.168.10.0
  #bridge_maxwait 0
  #bridge_fd 0
  #bridge_stp off

auto wan.999
iface wan.999 inet ppp
  bridge_ports eth0.999
  bridge_maxwait 0
  bridge_fd 0
  bridge_stp off
  

 DSLの設定

ppp関連のパッケージをインストールします。pppoeconfでの設定がオススメですが、直接設定ファイルを編集しても可能です。私の使っているDSLサービスはchapが使えなかったので一部設定を変えています。

/etc/systemd/system/pppoe.service

[Unit]
 Description=PPPoE connection
 [Service]
 Type=oneshot
 RemainAfterExit=true
 ExecStart=/usr/bin/pon dsl-provider
 ExecStop=/usr/bin/poff -a dsl-provider
 [Install]
 WantedBy=default.target

/etc/ppp/pap-secrets

"myname@xxx.so-net.ne.jp" * "mypass"

/etc/ppp/chap-secrets: ISP so-netはなし

/etc/ppp/peers/dsl-provider

noipdefault
 usepeerdns
 defaultroute
 hide-password
 lcp-echo-interval 20
 lcp-echo-failure 3
 connect /bin/true
 noauth
 persist
 mtu 1492
 noaccomp
 default-asyncmap
 plugin rp-pppoe.so
 nic-wan.999
 user "myname@xxxx.so-net.ne.jp"

DDNSの設定

mydns.jpを使っているのですが、OpenWrtと違ってDebianには自動更新するパッケージがありません。そこでsystemdを使って自作します。

/etc/systemd/system/ddns-update.service

[Unit]
 Description=DDNS update
 After=network.target
[Service]
 Type=simple
 User=root
 Restart=always
 WorkingDirectory=/etc/ddns
 ExecStart=/etc/ddns/ddns-update.sh start
 ExecStop=/etc/ddns/ddns-update.sh stop
 StandardOutput=journal
 StandardError=journal
[Install]
 WantedBy=multi-user.target

/etc/ddns/ddns-update.sh

#!/bin/sh

HOST=oreore.mydns.jp

start() {
  while true; do
    MY_IP=`ip addr show ppp0 | awk '/inet/ {print $2}' | cut -f1 -d "/"`
    DDNS_IP=`dig @8.8.8.8 $HOST type=A +short`
    if [ "$MY_IP" != "$DDNS_IP" ]; then
        /etc/ddns/oreore.mydns.jp.sh >/dev/null 2>&1
    fi
    sleep 1
  done
}

stop() {
    kill -KILL `pgrep -f -a ddns-update.sh | awk '{print $1}'`
}

case $1 in
  start|stop) "$1" ;;
esac

cat /etc/ddns/oreore.mydns.jp.sh

#!/bin/sh

IP=`ip addr show ppp0 | awk '/inet/ {print $2}' | cut -f1 -d "/"`
curl -s "https://www.mydns.jp/directip.html?MID=mydnsxxxxxxxx&PWD=xxxxxxxxxxxxxxxxxxxxxxx&IPV4ADDR=$IP"
exit 0

Firewallの設定

私はShorewallをいうfirewallプログラムを使っているので旧ルーターのOpenWrtの設定に合わせて変更します。

/etc/shorewall/interfaces

?FORMAT 2
###############################################################################
#ZONE		INTERFACE		OPTIONS
net             ppp+                     
loc             br0.111                 routeback,bridge,dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
dmz             br0.333                 routeback,bridge,dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
tor             eth0.666                dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
vpn0            tun+

/etc/shorewall/policy

###############################################################################
#SOURCE		DEST		POLICY	LOGLEVEL	RATE	CONNLIMIT
$FW		net		ACCEPT
$FW		loc		ACCEPT
net		all		DROP		info

# loc
loc             $FW             DROP
loc             net             ACCEPT

# dmz
dmz             $FW             DROP
dmz             net             ACCEPT

# tor
tor             $FW             DROP
tor             net             ACCEPT

## vpn0: openvpn
vpn0		loc		ACCEPT
vpn0		$FW		DROP
$FW		vpn0		ACCEPT

# The FOLLOWING POLICY MUST BE LAST
all		all		REJECT		info

/etc/shorewall/rules

#ACTION		SOURCE		DEST		PROTO	DPORT	SPORT	ORIGDEST	RATE	USER	MARK	CONNLIMIT	TIME	HEADERS	SWITCH	HELPER

?SECTION ALL
?SECTION ESTABLISHED
?SECTION RELATED
?SECTION INVALID
?SECTION UNTRACKED
?SECTION NEW

# Drop packets in the INVALID state
Invalid(DROP)  net	        $FW		tcp

# Drop Ping from the "bad" net zone.. and prevent your log from being flooded..
Ping(DROP)	net		$FW
Ping(ACCEPT)	loc		$FW

# Permit all ICMP traffic FROM the firewall TO the net zone
ACCEPT		$FW		net		icmp
ACCEPT		$FW		loc		icmp

#       Accept SSH connections from the internet for administration
#
SSH(DROP)       net		$FW		tcp	22
SSH(ACCEPT)     loc		$FW		tcp	22

ACCEPT          loc		$FW		tcp	8123
ACCEPT          loc		$FW		udp	161

# IPsec
#ACCEPT          net     $FW             ah
ACCEPT          net     $FW             esp
ACCEPT          net     $FW             udp     500
ACCEPT          net     $FW             udp     4500
#ACCEPT          $FW     net             ah
ACCEPT          $FW     net             esp
ACCEPT          $FW     net             udp     500
ACCEPT          $FW     net             udp     4500

# OpenVpn
ACCEPT          net     $FW     udp     1194
ACCEPT          $FW     net     udp     1194

/etc/shorewall/snat

#ACTION			SOURCE			DEST		PROTO	PORT	IPSEC	MARK	USER	SWITCH	ORIGDEST	PROBABILITY
MASQUERADE              192.168.1.0/24        ppp+

/etc/shorewall/start

##IPsec
iptables -I INPUT  -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD  -m policy --dir in --pol ipsec --proto esp -j ACCEPT
iptables -I FORWARD  -m policy --dir out --pol ipsec --proto esp -j ACCEPT
iptables -I OUTPUT   -m policy --dir out --pol ipsec --proto esp -j ACCEPT

# Accept from vpn to lan
iptables -t nat -I POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT

## MTU/MSS fix
iptables -t mangle -A FORWARD -m policy --pol ipsec --dir in -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
iptables -t mangle -A FORWARD -m policy --pol ipsec --dir out -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360

#sip
WANIF=ppp0
LANIF=br0.111
iptables -I INPUT -m udp -p udp -i $WANIF --dport 5060 -j ACCEPT
iptables -I INPUT -m udp -p udp -i $WANIF --dport 7070:7080 -j ACCEPT
iptables -t mangle -A POSTROUTING -o $WANIF -p udp --dport 5060 -j CLASSIFY --set-class 2:1
iptables -t mangle -A POSTROUTING -o $WANIF -p udp --sport 7070:7080 -j CLASSIFY --set-class 2:1 
iptables -I INPUT -m udp -p udp -i $LANIF --dport 5060 -j ACCEPT
iptables -I INPUT -m udp -p udp -i $LANIF --dport 7070:7080 -j ACCEPT

/etc/shorewall/zones

###############################################################################
#ZONE		TYPE		OPTIONS		IN_OPTIONS	OUT_OPTIONS

fw		firewall
net		ipv4
loc		ipv4
tor		ipv4
dmz		ipv4
ipsec0		ipsec           mode=tunnel
vpn0		ipv4

Siproxdの設定

SIPフォンも旧ルーターに合わせて設定します。

/etc/siproxd.conf

if_inbound  = br0.111
if_outbound = ppp0
host_outbound = pikatyu.mydns.jp
hosts_allow_reg = 192.168.211.0/26
sip_listen_port = 5060
daemonize = 1
silence_log = 1
user = siproxd 
registration_file = /var/lib/siproxd/siproxd_registrations
autosave_registrations = 300
pid_file = /var/run/siproxd/siproxd.pid
rtp_proxy_enable = 1
rtp_port_low  = 7070
rtp_port_high = 7080
rtp_timeout = 300
default_expires = 600
tcp_timeout = 600
tcp_connect_timeout = 500
tcp_keepalive = 20
debug_level =      0x00000000
debug_port = 0
ua_string = Siproxd-UA
use_rport = 0
plugindir=/usr/lib/aarch64-linux-gnu/siproxd/

IKEv2(StrongSwan)とOpenVPNはとくに大きな変更はありません。OpenVPNサーバはsystemdで起動できるようにします。

systemd enable daemon nameとしてデーモンを登録してから設定をリロードします。

systemctl daemon-reload

その他

DHCPサーバを探す

ネットワークを弄っていると、いつのまにか旧設定が混在してあれ?ってことになることがあります。DHCPサーバをどこで設定したのか忘れるときがあります。その時の検索方法です。

sudo apt install dhcping
sudo dhcping -s 255.255.255.255

sysctlの最適化

ルータの落とし所はOpenWrtがよくわかっているので設定をそのままコピーしました。sshセッションがpppoeの再接続で切れるということがなくなります。

/etc/sysctl.d/10-default.conf

net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.ip_forward=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.ipv4.igmp_max_memberships=100
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_dsack=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

/etc/sysctl.d/11-nf-conntrack.conf

net.netfilter.nf_conntrack_acct=1
net.netfilter.nf_conntrack_checksum=0
net.netfilter.nf_conntrack_max=16384
net.netfilter.nf_conntrack_tcp_timeout_established=7440
net.netfilter.nf_conntrack_udp_timeout=60
net.netfilter.nf_conntrack_udp_timeout_stream=180

Debianの静的ルーティング

ノートPCをサーバ代わりに使っている状況で、ネットワーキングの設定は旧来のやり方、/etc/networkの設定で今まではうまく稼働していましたが、静的ルーティングの設定が反映されないという問題に直面しました。Debian Wikiではpost-upを使うように書かれています。

post-up route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.100 dev eth0

ところがこれだとリブートしてもルーティングが反映されませんでした。さらに調べてみると、/etc/network/if-up.dにカスタムスクリプトがおけることがわかりましたので次のようにしてみました。

/etc/network/if-up.d/static-routing

!/bin/sh

IFACE=enp0s25
if [ -d "/proc/sys/net/ipv4/conf/$IFACE" ]
then
/sbin/route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.100 dev $IFACE
fi

この設定をしてリブートしてip routeで確認してみます。

以上です。

Nginxでunix domain socketを使う

Alblenetでnginxを使っていたときは、lxcコンテナだったのでreverse proxyでローカルIPをlxcホストに飛ばしていましたが、A2ホスティングに移したとき、OpenVZだったのでコンテナが作れません。それでポートを使ってreverse proxyで飛ばしていましたが、httpポートが増えて煩雑になることとMySQLではローカルの場合ソケットを使っていてIPポートを使うより高速に動作するので、nginxでもソケットで飛ばせるのではないかと考えて、検索して調べてみました。私が思いつく段階ですでに頭のいい人たちがやっていることがほとんどなので、今回も例にもれず実例が見つかりました。upstreamを使う場合と、proxy_passに指定する方法の2通りありました。

Upstreamの場合

upstream backend {
    server unix:/var/run/mail.sock;
}

...

server {
    listen        443 ssl;
    server_name   mx.hottuna.tk;
...
   proxy_pass http://backend;

Proxy_passの場合

server {
    listen        443 ssl;
    server_name   mx.hottuna.tk;
...
   proxy_pass http://unix:/var/run/mail.sock;

バックエンドサーバ例

server {
    #listen         83;
    listen         unix:/var/run/mail.sock;
    server_name    mx.hottuna.tk;
...

ディストリビューションによって違いがあるのかもしれませんが、debianだと正常にサーバをシャットダウンできません。ソケットが残っていて再度立ち上げるときに次のようなエラーを吐きます。


Sep 30 12:51:32 hottuna nginx[4658]: nginx: [emerg] bind() to unix:/var/run/mail.sock failed (98: Address already in use)
Sep 30 12:51:32 hottuna nginx[4658]: nginx: [emerg] bind() to unix:/var/run/mail.sock failed (98: Address already in use)
Sep 30 12:51:33 hottuna nginx[4658]: nginx: [emerg] bind() to unix:/var/run/mail.sock failed (98: Address already in use)
Sep 30 12:51:33 hottuna nginx[4658]: nginx: [emerg] bind() to unix:/var/run/mail.sock failed (98: Address already in use)
Sep 30 12:51:34 hottuna nginx[4658]: nginx: [emerg] bind() to unix:/var/run/mail.sock failed (98: Address already in use)

これも検索すると解決方法があり、サーバを止めるときにTERMシグナルを使うことです。具体的には次のようにします。

/lib/systemd/system/nginx.service


#ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
ExecStop=-/sbin/start-stop-daemon --quiet --stop --signal TERM --pidfile /run/nginx.pid

ファイルを変更したらsystemdのコマンドを実行します。

systemctl daemon-reload

これでnginxでドメインソケットが使えるようになりました。

問題点

設定したあとに気がついたのですが、unix domain socketのバッファーは小さいので、転送量がある時点で限界に達するということです。詳しくは他のサイトで詳細があるのでそちらを参照してください。