Sebagai seseorang yang sering bekerja dengan dual network (jaringan intranet kantor dan Internet Wifi), saya pernah mengalami masalah yang cukup menjengkelkan di MacBook saya. Setiap kali saya ingin mengakses subnet internal kantor dengan IP 10.0.0.0/8
, saya harus menambahkan route manual ke gateway tertentu supaya bisa terhubung.
Masalah: Route Hilang Setiap Kali Restart atau Kabel LAN Dicabut
Untuk mengakses jaringan internal kantor, saya harus memasukkan perintah ini setiap kali laptop saya baru nyala atau ketika saya mencabut dan memasang kembali kabel LAN:
sudo route -n add -net 10.0.0.0/8 10.0.71.1
Memang ini berhasil, tapi…
- Setiap reboot laptop harus input ulang perintah ini.
- Jika kabel LAN dicabut dan dipasang lagi, route hilang dan koneksi ke jaringan internal terputus.
- Ini sangat merepotkan dan tidak efisien, apalagi kalau saya sering berpindah-pindah lokasi kerja.
Awalnya: Solusi Manual Saja
Awalnya saya hanya menghafal dan mengetik ulang perintah tersebut saat dibutuhkan. Terkadang saya buat alias di .bash_profile
atau .zshrc
supaya lebih cepat:
alias addroute='sudo route -n add -net 10.0.0.0/8 10.0.71.1'
Tapi ini bukan solusi jangka panjang karena saya masih harus ingat menjalankan alias tersebut dan tetap ada risiko lupa, apalagi saat buru-buru.
Cari Cara Agar Route Ditambahkan Otomatis Saat Boot
Saya pun mulai mencari cara agar route ini otomatis jalan setiap kali Mac saya dinyalakan tanpa harus repot manual.
Ternyata di macOS, kita bisa membuat LaunchDaemon yang berjalan sebagai root dan menjalankan perintah tertentu saat sistem booting.
Langkah Membuat Skrip dan LaunchDaemon
- Buat skrip shell
/usr/local/bin/add_static_route.sh
tanpasudo
(karena nanti dijalankan oleh root):#!/bin/bash /sbin/route -n add -net 10.0.0.0/8 10.0.71.1
Set executable permission:
sudo chmod +x /usr/local/bin/add_static_route.sh
- Buat file LaunchDaemon plist di
/Library/LaunchDaemons/com.user.staticroute.plist
dengan isi seperti ini:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.user.staticroute</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/add_static_route.sh</string> </array> <key>RunAtLoad</key> <true/> <!-- <key>StandardOutPath</key> <string>/tmp/staticroute.out</string> <key>StandardErrorPath</key> <string>/tmp/staticroute.err</string> --> <key>StandardOutPath</key> <string>/dev/null</string> <key>StandardErrorPath</key> <string>/dev/null</string> </dict> </plist>
- Set permission dan ownership agar LaunchDaemon bisa dijalankan sebagai root:
sudo chown root:wheel /Library/LaunchDaemons/com.user.staticroute.plist sudo chmod 644 /Library/LaunchDaemons/com.user.staticroute.plist
- Load LaunchDaemon agar berjalan saat boot:
sudo launchctl load /Library/LaunchDaemons/com.user.staticroute.plist
Dengan cara ini, route akan otomatis ditambahkan saat boot, dan saya tidak perlu input manual lagi saat restart.
Tapi… Masalah Baru Muncul Saat Kabel LAN Dicabut dan Dipasang Kembali
Meskipun route otomatis jalan saat boot, saya perhatikan kalau kabel LAN dicabut dan colok ulang, route hilang kembali. Padahal saya masih menggunakan laptop yang sama, dan saya harus menjalankan ulang perintah manual. Setelah mencari refrensi, Hal ini bisa terjadi karena macOS mereset routing table setiap kali interface jaringan naik turun.
Solusi: Pantau Status Interface dan Tambah Route Jika Hilang
Setelah googling, saya membuat skrip pengecekan yang dijalankan secara berkala (misal tiap 10 detik) untuk melihat apakah route sudah ada. Jika belum ada, skrip ini otomatis menambahkan kembali route tersebut.
Skrip /usr/local/bin/check-and-add-route.sh
#!/bin/bash
# logfile="/tmp/route_watch_debug.log"
# echo "==== $(date): Cek route status ====" >> "$logfile"
# netstat -rn | grep '^10' >> "$logfile"
match=$(netstat -rn | awk '$1 == "10" && $2 == "10.0.71.1"')
if [ -n "$match" ]; then
# echo "$(date): Route SUDAH ADA, tidak ditambahkan" >> "$logfile"
exit 0
fi
/sbin/route -n add -net 10.0.0.0/8 10.0.71.1
# echo "$(date): Route added." >> "$logfile"
Beri executable permission:
sudo chmod +x /usr/local/bin/check-and-add-route.sh
File LaunchDaemon /Library/LaunchDaemons/com.user.routewatch.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.routewatch</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/check-and-add-route.sh</string>
</array>
<key>StartInterval</key>
<integer>10</integer>
<key>RunAtLoad</key>
<true/>
<!-- <key>StandardOutPath</key>
<string>/tmp/routewatch.out</string> -->
<key>StandardOutPath</key>
<string>/dev/null</string>
<!-- <key>StandardErrorPath</key>
<string>/tmp/routewatch.err</string> -->
<key>StandardErrorPath</key>
<string>/dev/null</string>
</dict>
</plist>
Set permission dan ownership:
sudo chown root:wheel /Library/LaunchDaemons/com.user.routewatch.plist
sudo chmod 644 /Library/LaunchDaemons/com.user.routewatch.plist
Load daemon:
sudo launchctl load /Library/LaunchDaemons/com.user.routewatch.plist
Hasil Akhir
- Saat booting, route otomatis ditambahkan.
- Saat kabel LAN dicabut dan dipasang kembali, dalam maksimal 10 detik route otomatis muncul lagi.
- Saya tidak perlu lagi mengingat dan mengetik perintah manual.
- Koneksi ke jaringan internal kantor jadi lebih stabil dan seamless.
Kesimpulan
Masalah yang awalnya sederhana tapi cukup mengganggu ini bisa diatasi dengan memanfaatkan fitur LaunchDaemon di macOS dan sedikit scripting shell.
Kalau kamu juga mengalami masalah serupa, semoga artikel ini membantu!
Kalau kamu mau saya bagikan contoh skrip lengkap dan file plist-nya, tinggal bilang ya. Selamat mencoba! 🚀
0 Komentar