Files
auto-macvlan/README.md
T

86 lines
2.7 KiB
Markdown

# auto-macvlan
Skrip untuk memasang **NIC macvlan** ke instance **Incus** dan mengaktifkan **DHCP di guest**, sehingga instance langsung mendapat IP di LAN (mis. `192.168.200.x`) — bukan IP NAT internal incus.
Cocok untuk instance yang perlu diakses langsung dari LAN (web, SSH, service yang di-publish podman/docker di dalamnya).
## Pemakaian
```bash
./incus-macvlan.sh <instance> [device] [network]
```
Contoh:
```bash
# pakai default: device eth1, network eth200
./incus-macvlan.sh web1
# tentukan device & network
./incus-macvlan.sh web1 eth1 eth200
# buat network macvlan bila belum ada
./incus-macvlan.sh web1 --create --parent enp2s0
```
## Opsi
| Opsi | Default | Keterangan |
|---|---|---|
| `--parent <iface>` | dari default route host | Interface fisik host untuk parent macvlan |
| `--network <name>` | `eth200` | Nama network macvlan di incus |
| `--device <name>` | `eth1` | Nama NIC di dalam guest |
| `--create` | mati | Buat network macvlan kalau belum ada |
| `-h, --help` | | Bantuan |
Argumen posisional: `$1` instance, `$2` device, `$3` network. Opsi mengalahkan posisional.
## Yang dilakukan
1. Cek instance ada dan berjalan (start bila perlu).
2. Pastikan network macvlan ada (buat dengan `--create` bila perlu).
3. Pasang NIC `nic network=<network> name=<device>` ke instance (hotplug).
4. Aktifkan DHCP di guest:
- **NetworkManager** → `nmcli`
- **systemd-networkd** → `/etc/systemd/network/20-<device>.network`
- fallback: `dhcpcd` / `dhclient` / `udhcpc`
5. Tunggu dan tampilkan IP LAN.
Idempotent — aman dijalankan ulang.
## Persiapan network macvlan (sekali)
```bash
incus network create eth200 --type=macvlan parent=enp2s0
```
Atau biarkan skrip membuatnya dengan `--create`.
## Syarat
- Host Incus punya NIC fisik yang terhubung ke LAN (parent, mis. `enp2s0`).
- **DHCP server di LAN** aktif (IP instance berasal dari router LAN, bukan incus).
- Guest punya salah satu DHCP client di atas.
## Catatan penting
- **Host Incus tidak bisa menghubungi instance lewat IP LAN macvlan** (batasan macvlan). Dari host, kelola lewat `incus exec`; instance tetap bisa diakses dari perangkat LAN lain.
- Bila instance punya **dua NIC** (incusbr0 + macvlan) dan default route dari incusbr0 menang, balasan ke LAN bisa keluar lewat NIC yang salah. Solusi: jadikan macvlan default dengan metrik lebih rendah, mis.:
```ini
# /etc/systemd/network/20-eth1.network
[Match]
Name=eth1
[Network]
DHCP=yes
[DHCPv4]
RouteMetric=50
```
atau nonaktifkan NIC incusbr0 bila tidak diperlukan.
- IP yang didapat dinamis dari LAN. Kalau butuh statis, atur DHCP reservation di router atau konfigurasi statis di guest.
## Lisensi
MIT — lihat [LICENSE](LICENSE).