Bagaimana cara permanen mengaktifkan ip forwarding di Linux dengan systemd?

8

Saya mencoba untuk mengaktifkan ip forwarding (antara enp0s3dan tun0interface) dan menulis net.ipv4.ip_forward = 1di /etc/sysctl.conf. Setelah restart saya miliki

$ cat /proc/sys/net/ipv4/ip_forward
1

Tetapi penerusan masih tidak berhasil. Saya mencoba untuk menambahkan net.ipv4.conf.default.forwarding=1di /etc/sysctl.conf. Sekarang setelah restart saya miliki

$ cat /proc/sys/net/ipv4/ip_forward
1
$ cat /proc/sys/net/ipv4/conf/default/forwarding
1
$ cat /proc/sys/net/ipv4/conf/all/forwarding
1
$ cat /proc/sys/net/ipv4/conf/enp0s3/forwarding
0
$ cat /proc/sys/net/ipv4/conf/tun0/forwarding
0

Saya tidak dapat mengaktifkan /proc/sys/net/ipv4/conf/enp0s3/forwardingdan /proc/sys/net/ipv4/conf/tun0/forwardingdi sysctl.confkarena file ini tidak ada pada saat boot awal seperti:

systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/enp0s3/forwarding', ignoring: No such file or directory
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/tun0/forwarding', ignoring: No such file or directory)

, lebih dari tun0itu antarmuka dinamis (dapat ditambahkan dan dihapus kapan saja).

Jika saya mengaktifkan penerusan secara manual enp0s3dan tun0kemudian penerusan berfungsi seperti yang diharapkan.

Jadi, bagaimana cara mengaktifkan penerusan untuk antarmuka?

PS: Gentoo dengan kernel 4.1.15 dan systemd 226

PPS: jika ingatanku beberapa waktu yang lalu net.ipv4.ip_forward = 1sudah cukup.

Tidak terakreditasi
sumber

Jawaban:

3

Saya akhirnya menyelesaikan masalah. Saya menggunakan systemd (dengan networkd) dan fitur baru tentang penerusan ip telah diperkenalkan di systemd-221: "IPForwarding =" - lihat https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829727eece40f7fce4/NEWS

Dari man systemd.network:

[JARINGAN] PILIHAN BAGIAN

...

IPForward =

Mengkonfigurasi penerusan IP untuk antarmuka jaringan. Jika diaktifkan paket yang masuk pada antarmuka jaringan akan diteruskan ke antarmuka lain sesuai dengan tabel routing. Mengambil argumen boolean, atau nilai "ipv4" atau "ipv6", yang hanya memungkinkan penerusan IP untuk keluarga alamat yang ditentukan, atau "kernel", yang mempertahankan pengaturan sysctl yang ada. Ini mengontrol net.ipv4.conf..forwarding dan net.ipv6.conf..forwarding opsi sysctl dari antarmuka jaringan (lihat ip-sysctl.txt [1] untuk detail tentang opsi sysctl). Standarnya adalah "tidak".

Catatan: kecuali jika opsi ini dinyalakan, atau disetel ke "kernel", tidak ada penerusan IP yang dilakukan pada antarmuka ini, bahkan jika ini diaktifkan secara global di kernel, dengan net.ipv4.ip_forward, net.ipv4.conf. semua.forwarding, dan net.ipv6.conf.all.forwarding opsi sysctl.

Jadi sekarang saya menggunakan file jaringan seperti berikut untuk mengaktifkan penerusan ip (per antarmuka):

# cat /etc/systemd/network/tun0.network
[Match]
Name=tun0

[Network]
IPForward=ipv4
Tidak terakreditasi
sumber