Lewati ke konten
‹ Semua tulisan

· Diperbarui · Catatan kerja

SSH dari Mac ke Linux melalui USB

Patch driver untuk menghubungkan Linux dan Mac Apple Silicon melalui USB

Durasi 7:28 · Suara sintetis dari OmniVoice

Saya bekerja dengan dua laptop, Mac dan Ubuntu, dan ingin menggunakan kabel USB sebagai jalur untuk mengakses laptop Ubuntu dari Mac melalui SSH. Linux berperan sebagai server SSH, sedangkan Terminal macOS menjadi client. Tujuannya sederhana: kedua laptop dapat berkomunikasi langsung setelah jaringan USB siap, tanpa bergantung pada Wi-Fi atau router.

Tantangannya ada pada sisi Linux. Mac berbasis Apple Silicon dapat terdeteksi melalui USB, tetapi belum dikenali sebagai interface jaringan oleh driver bawaan Linux. Untuk mengatasinya, saya menyiapkan patch driver yang menargetkan Ubuntu 24.04 di repositori apple-ncm-linux.

Arsitektur koneksi#

Koneksi menggunakan USB sebagai media fisik dan jaringan IP sebagai jalur komunikasi. Setelah interface jaringan tersedia di kedua laptop, SSH bekerja seperti koneksi jaringan biasa.

flowchart LR
    Mac["Mac · SSH client<br/>10.254.254.1"] -->|"USB networking"| Linux["Linux · SSH server<br/>10.254.254.2"]

Mac menggunakan alamat 10.254.254.1, sedangkan Linux menggunakan 10.254.254.2. Keduanya berada dalam subnet 10.254.254.0/30, yang menyediakan dua alamat host untuk koneksi point-to-point ini.

Persiapan di Ubuntu#

Sebelum mengubah driver, periksa apakah Ubuntu sudah dapat mengenali Mac sebagai interface jaringan. Hubungkan kedua laptop menggunakan kabel USB-C yang mendukung transfer data, lalu jalankan:

uname -r
lsusb -d 05ac:
ip -br link
sudo journalctl -k -b --no-pager | grep -iE 'cdc_ncm|05ac|bind.*failure'

Pemeriksaan ini membantu membedakan masalah deteksi perangkat USB dari masalah inisialisasi driver. Target patch mencakup perangkat Apple dengan vendor ID 05ac dan product ID 1902 atau 1905.

Siapkan utilitas jaringan dan USB:

sudo apt update
sudo apt install usbutils iproute2 ethtool

Jika interface jaringan USB sudah berfungsi menggunakan driver bawaan, patch tidak diperlukan. Langsung lanjutkan ke konfigurasi alamat IP dan SSH.

Patch dan instalasi driver#

Jika perangkat terdeteksi tetapi interface jaringan tidak terbentuk karena masalah binding driver, periksa kecocokan perangkat dengan patch. Ambil repositori patch dan pasang dependensi build serta kernel headers:

git clone https://github.com/indramahkota/apple-ncm-linux.git
cd apple-ncm-linux
sudo apt install build-essential linux-headers-$(uname -r) kmod mokutil

Build modul sebagai pengguna biasa:

make

Pada sistem dengan Secure Boot, periksa statusnya:

mokutil --sb-state

Jika Secure Boot aktif, modul perlu ditandatangani dan key didaftarkan melalui Machine Owner Key (MOK) sebelum dapat dimuat. Ikuti dokumentasi Secure Boot Ubuntu untuk proses tersebut. Simpan private key di luar repositori.

Setelah modul siap, pasang modulnya:

sudo make install

Jika instalasi selesai, restart Ubuntu dari terminal lokal atau melalui koneksi lain yang masih dapat digunakan setelah reboot:

sudo reboot

Jangan menghapus driver pengganti yang sudah ada tanpa memeriksa asal dan cara pemasangannya terlebih dahulu. Jika modul dimuat melalui initramfs, pembaruannya juga perlu dilakukan sesuai konfigurasi distribusi.

Konfigurasi jaringan USB#

Setelah Ubuntu menyala kembali, identifikasi interface jaringan yang terhubung ke Mac:

ip -br link
ethtool -i INTERFACE_LINUX

Ganti INTERFACE_LINUX dengan nama interface yang benar. Pastikan driver yang digunakan adalah cdc_ncm.

Sebelum menetapkan alamat IP, periksa konfigurasi jaringan yang sudah ada:

ip -4 address
ip -4 route show table all

Jika subnet yang digunakan tidak bertabrakan dengan jaringan lain, tetapkan alamat Ubuntu dan aktifkan interface:

sudo ip address add 10.254.254.2/30 dev INTERFACE_LINUX
sudo ip link set dev INTERFACE_LINUX up

Konfigurasi ini bersifat sementara dan akan hilang setelah reboot. Untuk penggunaan berulang, simpan pengaturan melalui NetworkManager atau Netplan, sesuai yang digunakan di Ubuntu.

Jika terdapat lebih dari satu interface NCM, pastikan alamat tersebut diterapkan pada interface yang benar dan hanya pada satu pasangan koneksi USB.

Konfigurasi jaringan pada macOS#

Pada Mac, buka System Settings > Network, pilih koneksi USB menuju Linux, lalu atur IPv4 secara manual:

  • IP address: 10.254.254.1
  • Subnet mask: 255.255.255.252
  • Router: kosong
  • DNS tambahan: kosong

Jika koneksi USB tidak muncul dalam daftar jaringan, identifikasi nama interface melalui Terminal:

networksetup -listallhardwareports

Setelah menemukan interface yang sesuai, alamat IP dapat dipasang sementara menggunakan:

sudo ifconfig INTERFACE_MAC inet 10.254.254.1 netmask 255.255.255.252 up

Ganti INTERFACE_MAC dengan nama interface USB yang benar pada macOS. Nama interface pada Mac tidak harus sama dengan nama interface pada Ubuntu.

Pengaturan ini tidak mengharuskan Wi-Fi atau Ethernet utama dinonaktifkan. Koneksi USB menggunakan subnet tersendiri sehingga dapat berjalan berdampingan dengan koneksi jaringan lain, selama tidak ada konflik alamat atau routing.

Uji konektivitas dari Terminal macOS:

ping -c 3 10.254.254.2

Jika mendapat balasan, komunikasi IP antara kedua laptop sudah berjalan. Jika tidak, periksa kembali pasangan interface, alamat IP, status link, dan konfigurasi jaringan.

Mengaktifkan SSH di Ubuntu#

Pasang OpenSSH Server:

sudo apt install openssh-server
sudo systemctl enable --now ssh

Jika UFW aktif, izinkan koneksi SSH yang masuk melalui interface USB:

sudo ufw allow in on INTERFACE_LINUX to 10.254.254.2 port 22 proto tcp

Aturan ini membatasi izin berdasarkan interface dan alamat tujuan. Periksa aturan firewall yang sudah ada agar konfigurasi baru tidak bertentangan dengan kebijakan akses sebelumnya.

Sekarang, dari Terminal macOS, jalankan:

ssh USER@10.254.254.2

Ganti USER dengan username akun Ubuntu. Pada koneksi pertama, periksa fingerprint host melalui jalur tepercaya sebelum menerima host key. Setelah autentikasi berhasil, Terminal macOS dapat digunakan untuk mengakses Linux melalui kabel USB.

Troubleshooting#

GejalaPemeriksaan
Interface jaringan USB tidak munculPeriksa deteksi perangkat, log kernel, dukungan driver, dan Secure Boot.
Interface tersedia, tetapi ping gagalPeriksa pasangan interface, alamat IP, subnet, dan firewall. Status UNKNOWN saja tidak membuktikan koneksi gagal.
SSH menampilkan Connection refusedPeriksa layanan SSH dan apakah port 22 menerima koneksi.
SSH mengalami timeoutPeriksa konektivitas IP dan aturan firewall.
SSH menampilkan Permission deniedPeriksa username dan konfigurasi autentikasi.

Menghapus patch#

Jika ingin kembali menggunakan driver bawaan, jalankan perintah berikut dari direktori repositori:

sudo make uninstall

Jika driver dimuat melalui initramfs, perbarui initramfs sesuai panduan distribusi sebelum restart. Penghapusan patch hanya berlaku untuk modul pengganti pada kernel yang sedang digunakan.

Alamat IP sementara di Ubuntu dapat dihapus dengan:

sudo ip address del 10.254.254.2/30 dev INTERFACE_LINUX

Pengaturan jaringan permanen, layanan SSH, dan aturan firewall dikelola secara terpisah. Menghapus patch tidak otomatis menghapus konfigurasi tersebut.

Catatan pemeliharaan#

Patch driver perlu dievaluasi kembali setelah pembaruan kernel karena kompatibilitas modul bergantung pada versi dan implementasi kernel yang digunakan. Driver pengganti juga dapat memengaruhi perangkat NCM lain, sehingga pengujian sebaiknya dilakukan pada perangkat dan konfigurasi yang relevan.

Kode asal dari kernel Linux v6.8 mempertahankan lisensi GPLv2 atau BSD 2-Clause, sedangkan materi proyek menggunakan GPL-2.0-only. Proyek ini independen dan tidak berafiliasi dengan Apple Inc.

Dengan driver yang sesuai, konfigurasi IP pada kedua laptop, dan OpenSSH Server yang aktif, Mac dapat mengakses Linux secara langsung melalui USB. Setelah koneksi ini siap, saya memakai laptop Ubuntu untuk menguji AI lokal dengan VRAM 6 GiB.

Komentar

0 komentar

Belum ada komentar.