Χρειάζομαι να συνδέομαι σε VPN μέσω FortiClient για να κάνω τη δουλειά μου και να έχω πρόσβαση σε κάποιους πόρους με ασφάλεια. Όταν ξεκίνησα να δουλεύω για την εταιρεία μου τον Μάρτιο του 2021, μου έδωσαν ένα M1 MacBookPro. Το M1 MacBookPro είναι διαφορετικό από τα άλλα επειδή έρχεται με νέα αρχιτεκτονική CPU. Προηγουμένως, η Apple χρησιμοποιούσε CPU βασισμένη σε Intel, αλλά τώρα αποφάσισαν να τρέχουν το macOS με CPU βασισμένη σε ARM και η Apple το ονόμασε M1 προς το παρόν.

Πολλά λογισμικά δεν είναι συμβατά με ARM. Μερικές φορές αντιμετωπίζω κάποια προβλήματα όπως "This component is not compatible with your CPU".

Όταν συνδέθηκα σε VPN μέσω FortiClient v6.4.3.1325, φαίνεται συνδεδεμένο αλλά η ταχύτητα του internet μου γίνεται πολύ αργή. Κανονικά, έχω ταχύτητα internet 100MB/sec. Ρώτησα τους συναδέλφους μου αν "αντιμετωπίζετε προβλήματα με το VPN ή/και την ταχύτητα VPN;" και μου είπαν "ΟΧΙ!" Χρησιμοποιούν λίγο παλαιότερο MacBookPro από το δικό μου με CPU βασισμένη σε Intel και σκέφτηκα ότι είναι φυσιολογική κατάσταση επειδή οι εκδόσεις με Intel είναι εντάξει και σταθερές.

Άρχισα να κάνω debugging για να βρω τη βασική αιτία και έλεγξα τον πίνακα δρομολόγησης πριν συνδεθώ στο 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 είναι ο ασύρματος router μου και η default διαδρομή οδηγεί στον ασύρματο router μου. Είναι εντάξει.

Μετά από αυτό, συνδέθηκα σε VPN μέσω FortiClient και ξαναέλεγξα τον πίνακα δρομολόγησής μου. Το 10.212.134.152 είναι η τοπική μου IP διεύθυνση που εκχωρείται από το FortiClient.

➜  ~ 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 μας δεν χρησιμοποιεί split-tunneling και το link#19 Ή 10.212.134.152 θα πρέπει να είναι το next hop για την default διαδρομή μαζί με τον ασύρματο router μου ταυτόχρονα.

Διαγράφω την default διαδρομή μου!

Ναι, αποφάσισα να χειριστώ τον πίνακα δρομολόγησής μου χειροκίνητα.

➜  ~ sudo route delete default
Password:
delete net default

Τώρα, το next hop θα πρέπει να είναι η τοπική διεύθυνση IP του FortiClient μου. Είναι 10.212.134.152 για την περίπτωσή μου. Αυτή η τοπική διεύθυνση IP είναι δυναμική και αλλάζει σε κάθε σύνδεση επειδή το DHCP εκχωρεί αυτή τη διεύθυνση IP.

Τώρα, πώς μοιάζει ο πίνακας δρομολόγησής μου; Η default διαδρομή δεν θα πρέπει να είναι εκεί...

➜  ~ 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 εξαφανίστηκε από την default διαδρομή. Ωραία! Και τώρα, δεν μπορώ να έχω πρόσβαση στο internet. Ως default διαδρομή, ο ασύρματος router μου είναι ακόμα στον πίνακα δρομολόγησης, αλλά το FortiClient το χρησιμοποιεί για να διατηρεί τη σύνδεση με το VPN. Ναι, είμαι ακόμα συνδεδεμένος στο internet αλλά δεν έχω next hop.

➜  ~ 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

Ας προσθέσουμε μια νέα default διαδρομή...

➜  ~ sudo route add default 10.212.134.152
add net default: gateway 10.212.134.152

Τώρα, μπορώ να κάνω ping στο 8.8.8.8 μετά την προσθήκη μιας νέας default διαδρομής.

➜  ~ 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

Διασταυρωτικός έλεγχος

Έλεγξα τον πίνακα δρομολόγησης για τελευταία φορά για να δω ποια είναι η διαφορά μετά τη διαγραφή και προσθήκη της default διαδρομής.

➜  ~ 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 μου είναι σταθερή και γρήγορη!

Bonus

Χρειάζομαι να διαγράφω και να προσθέτω μια νέα default διαδρομή όταν χρειάζεται να συνδεθώ στο VPN και κάθε μέρα χρειάζεται να συνδέομαι. Δεν θέλω να διαγράφω και να προσθέτω μια νέα διαδρομή χειροκίνητα και έγραψα ένα μικρό bash script για αυτή τη ρουτίνα.

Μπορείς να αποθηκεύσεις το script στη διαδρομή /usr/local/bin/ με sudo vim. Μετά από αυτό, μην ξεχάσεις να προσθέσεις δικαιώματα chmod για το script.

#!/bin/bash

FortiIP=$(netstat -rn | grep “10.212.134” | awk ‘{print $2}’)

sudo route delete default sudo route add default $FortiIP

Αν διάβασες από την αρχή, πρέπει να πω ευχαριστώ! : )