M1 MacBookProでのFortiClient問題と解決策
Apple M1 MacBookProでのFortiClient VPNクライアント接続問題のクイックフィックス解決策を見つけた。大したことではないが...

仕事をしてリソースに安全にアクセスするためにFortiClient経由でVPNに接続する必要がある。2021年3月に会社で働き始めたとき、M1 MacBookProが支給された。M1 MacBookProは新しいCPUアーキテクチャを搭載しているため、他のものとは異なる。以前AppleはIntelベースのCPUを使用していたが、現在はARMベースのCPUでmacOSを実行することを決定し、今のところM1と呼ばれている。
多くのソフトウェアがARMと互換性がない。「このコンポーネントはお使いのCPUと互換性がありません」といった問題に時々遭遇する。
FortiClient v6.4.3.1325経由でVPNに接続すると、接続されているように見えるが、インターネット速度が極端に遅くなる。通常、100MB/秒のインターネット速度がある。同僚に「VPNやVPN速度に問題はないか?」と尋ねたところ、「いいえ!」と言われた。彼らは私より少し古いIntelベースのCPUを搭載したMacBookProを使用しており、Intelベースのバージョンは問題なく安定しているので、これは普通の状況だと思った。
根本原因を見つけるためにデバッグを開始し、VPNに接続する前にルーティングテーブルをチェックした。
➜ ~ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.31.1 UGScg en0
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#14 UCS en0 !
192.168.31 link#14 UCS en0 !
192.168.31.1/32 link#14 UCS en0 !
192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1189
192.168.31.147/32 link#14 UCS en0 !
192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0
192.168.31.171 b8:bc:5b:6:28:18 UHLWI en0 1165
192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
224.0.0/4 link#14 UmCS en0 !
224.0.0.251 1:0:5e:0:0:fb UHmLWI en0
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0
255.255.255.255/32 link#14 UCS en0 !
ルートテーブルは問題なさそうだ。192.168.31.1はワイヤレスルーターで、デフォルトルートはワイヤレスルーターに向いている。問題ない。
この後、FortiClient経由でVPNに接続し、ルートテーブルを再確認した。10.212.134.152はFortiClientによって割り当てられたローカルIPアドレスだ。
➜ ~ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default link#19 UCSg ppp0
default 192.168.31.1 UGScIg en0
8.8.8.8 link#19 UHWIig ppp0
13.224.58.179 link#19 UHWIig ppp0
31.XXX.XX.XX/32 192.168.31.1 UGSc en0
34.XXX.XX.XXX link#19 UHWIig ppp0
34.XXX.XXX.xxx link#19 UHWIig ppp0
35.XXX.XXX.XX link#19 UHWIig ppp0
35.XXX.XXX.XXX link#19 UHWIig ppp0
80.80.80.80 link#19 UHW3Ig ppp0 3597
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#14 UCS en0 !
169.254.38.179 10.212.134.152 UH ppp0
192.168.31 link#14 UCS en0 !
192.168.31.1/32 link#14 UCS en0 !
192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1181
192.168.31.147/32 link#14 UCS en0 !
192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0
192.168.31.171 b8:bc:5b:6:28:18 UHLWIi en0 1139
192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
224.0.0/4 link#19 UmCS ppp0
224.0.0/4 link#14 UmCSI en0 !
224.0.0.251 link#19 UHmW3I ppp0 3599
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0
239.255.255.250 link#19 UHmW3I ppp0 3599
255.255.255.255/32 link#19 UCS ppp0
255.255.255.255/32 link#14 UCSI en0 !
VPNサービスはスプリットトンネリングを使用しておらず、link#19または10.212.134.152がデフォルトルートのネクストホップであり、同時にワイヤレスルーターもデフォルトルートであるべきだ。
デフォルトルートを削除する!
そう、手動でルーティングテーブルを操作することにした。
➜ ~ sudo route delete default
Password:
delete net defaultこれでネクストホップはFortiClientのローカルIPアドレスになるはずだ。私の場合10.212.134.152だ。このローカルIPアドレスは動的で、DHCPがこのIPを割り当てるため接続ごとに変わる。
ルートテーブルはどうなっているか?デフォルトルートはもうないはずだ...
➜ ~ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 192.168.31.1 UGScIg en0
31.XXX.XX.XX/32 192.168.31.1 UGSc en0
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#14 UCS en0 !
169.254.38.179 10.212.134.152 UH ppp0
192.168.31 link#14 UCS en0 !
192.168.31.1/32 link#14 UCS en0 !
192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1178
192.168.31.147/32 link#14 UCS en0 !
192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0
192.168.31.171 b8:bc:5b:6:28:18 UHLWIi en0 586
192.168.31.222 c:2c:54:e4:67:81 UHLWI en0 1156
192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
224.0.0/4 link#19 UmCS ppp0
224.0.0/4 link#14 UmCSI en0 !
224.0.0.251 link#19 UHmW3I ppp0 3589
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0
239.255.255.250 link#19 UHmW3I ppp0 3588
255.255.255.255/32 link#19 UCS ppp0
255.255.255.255/32 link#14 UCSI en0 !
link#19がデフォルトルートから消えた。いいね!でも今はインターネットにアクセスできない。デフォルトルートとしてワイヤレスルーターはまだルートテーブルにあるが、FortiClientはVPN接続を維持するためにそれを使っている。つまり、まだインターネットに接続されているが、ネクストホップがない。
➜ ~ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
ping: sendto: No route to host
ping: sendto: No route to host
Request timeout for icmp_seq 0
ping: sendto: No route to host
Request timeout for icmp_seq 1
ping: sendto: No route to host
Request timeout for icmp_seq 2
— 8.8.8.8 ping statistics —
4 packets transmitted, 0 packets received, 100.0% packet loss
新しいデフォルトルートを追加しよう...
➜ ~ sudo route add default 10.212.134.152
add net default: gateway 10.212.134.152新しいデフォルトルートを追加した後、8.8.8.8にpingできるようになった。
➜ ~ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=114 time=99.007 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=114 time=98.277 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=114 time=103.634 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=114 time=104.365 ms
— 8.8.8.8 ping statistics —
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 98.277/101.321/104.365/2.704 ms
クロスチェック
デフォルトルートの削除と追加後の違いを確認するために、最後にもう一度ルートテーブルをチェックした。
➜ ~ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 10.212.134.152 UGScg ppp0
default 192.168.31.1 UGScIg en0
31.145.77.18/32 192.168.31.1 UGSc en0
127 127.0.0.1 UCS lo0
127.0.0.1 127.0.0.1 UH lo0
169.254 link#14 UCS en0 !
169.254.38.179 10.212.134.152 UH ppp0
192.168.31 link#14 UCS en0 !
192.168.31.1/32 link#14 UCS en0 !
192.168.31.1 ec:41:18:ec:c6:bc UHLWIir en0 1179
192.168.31.147/32 link#14 UCS en0 !
192.168.31.147 a0:78:17:87:b4:88 UHLWI lo0
192.168.31.171 b8:bc:5b:6:28:18 UHLWI en0 1146
192.168.31.222 c:2c:54:e4:67:81 UHLWI en0 1163
192.168.31.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
224.0.0/4 link#19 UmCS ppp0
224.0.0/4 link#14 UmCSI en0 !
224.0.0.251 link#19 UHmW3I ppp0 3582
239.255.255.250 1:0:5e:7f:ff:fa UHmLWI en0
239.255.255.250 link#19 UHmW3I ppp0 3557
255.255.255.255/32 link#19 UCS ppp0
255.255.255.255/32 link#14 UCSI en0 !
これですべてが完璧に動作している。VPN接続は安定して高速だ!
ボーナス
VPNに接続する必要があるたびにデフォルトルートを削除して追加する必要があり、毎日接続する必要がある。手動でルートを削除・追加したくないので、このルーティンのために小さなbashスクリプトを書いた。
スクリプトを/usr/local/bin/パスにsudo vimで保存できる。その後、スクリプトにchmodパーミッションを追加するのを忘れずに。
#!/bin/bash
FortiIP=$(netstat -rn | grep “10.212.134” | awk ‘{print $2}’)
sudo route delete default
sudo route add default $FortiIP
最初から読んでくれたなら、ありがとうと言わなければ!: )
Ercan の他のサイト
同じ著者、別の領域のサイトが2つ。