Ubah TTL di macOS biar hotspot HP tidak di-throttle
Pernah kejadian, internet di HP kenceng banget, tapi begitu di-tethering ke laptop lewat hotspot tiba-tiba melambat drastis? Itu bukan perasaan doang. Banyak operator seluler memang sengaja membatasi (throttle) trafik hotspot, meskipun kuota utama masih banyak. Yang menarik, salah satu cara mereka mendeteksi trafik hotspot itu sederhana: lewat nilai TTL di setiap paket.
Di tulisan ini saya catat cara mengakali deteksi itu di macOS dengan mengubah TTL default — trik yang saya temukan dari artikel ini.
Kenapa TTL bisa jadi penanda hotspot?
TTL (Time To Live) itu angka di header paket IP yang gunanya membatasi berapa banyak “hop” (lompatan antar router) sebuah paket boleh lewati sebelum dibuang. Setiap kali paket melewati satu hop, nilainya dikurangi satu.
Di kebanyakan sistem, paket lahir dengan TTL = 64. Nah, logika deteksi operator kira-kira begini:
- Kalau kamu browsing langsung dari HP, paket sampai ke jaringan operator dengan TTL masih 64 — dianggap pemakaian normal, dapat speed penuh.
- Kalau kamu tethering dari laptop, paket lahir di laptop dengan TTL 64, lalu melewati HP (satu hop), jadi sampai ke operator dengan TTL 63. Begitu operator lihat TTL < 64, mereka menyimpulkan “ini pasti hotspot” lalu di-throttle.
Jadi triknya jelas: kalau kita bikin paket dari laptop lahir dengan TTL 65, setelah lewat satu hop ke HP nilainya jadi 64 — persis seperti trafik langsung dari HP. Operator pun tidak curiga.
Ubah TTL sekarang juga
Di macOS, TTL diatur lewat sysctl. Ada dua parameter — satu untuk IPv4, satu untuk IPv6:
$ sudo sysctl net.inet.ip.ttl=65
net.inet.ip.ttl: 64 -> 65
$ sudo sysctl net.inet6.ip6.hlim=65
net.inet6.ip6.hlim: 64 -> 65
Selesai. Coba langsung tethering lagi, harusnya speed-nya kembali normal.
Perlu diingat, perubahan ini hanya bertahan sampai laptop di-restart. Setelah reboot, nilainya balik lagi ke 64.
Bikin permanen dengan LaunchDaemon
Biar tidak perlu ketik ulang tiap kali booting, kita bikin LaunchDaemon yang menjalankan perintah tadi otomatis saat startup. Buat dua file plist di /Library/LaunchDaemons/.
Yang pertama untuk IPv4, com.custom.ttl.ipv4.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.custom.ttl.ipv4</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>net.inet.ip.ttl=65</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Yang kedua untuk IPv6, com.custom.ttl.ipv6.plist — isinya sama, cuma ganti label dan parameternya:
<?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.custom.ttl.ipv6</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>net.inet6.ip6.hlim=65</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Setelah kedua file dibuat, load supaya aktif (dan otomatis jalan tiap boot berikutnya):
$ sudo launchctl load /Library/LaunchDaemons/com.custom.ttl.ipv4.plist
$ sudo launchctl load /Library/LaunchDaemons/com.custom.ttl.ipv6.plist
Untuk memastikan nilainya sudah benar, cek lagi:
$ sysctl net.inet.ip.ttl net.inet6.ip6.hlim
net.inet.ip.ttl: 65
net.inet6.ip6.hlim: 65
Catatan
- Kalau suatu saat mau balik ke default, tinggal
sudo launchctl unloadkedua plist tadi, lalu set balik nilainya ke64(atau restart). - Trik ini cuma menyamarkan satu metode deteksi. Operator yang lebih canggih bisa saja mendeteksi hotspot lewat cara lain (misalnya deep packet inspection atau pola trafik), jadi tidak selalu mempan.
- Dan tentu saja, pakailah sesuai ketentuan layanan operator kamu masing-masing.
Simpel, tapi lumayan menyelamatkan waktu WFC (work from cafe) ketika satu-satunya internet yang ada cuma hotspot HP.