Menonaktifkan rp_filter pada satu antarmuka

9

Saya memiliki Ubuntu 16.04 Server yang bertindak sebagai router dengan banyak antarmuka (VLAN). Secara default, rp_filter(reverse path filtering) diaktifkan untuk semua antarmuka. Saya ingin tetap seperti itu, tetapi buat pengecualian untuk satu antarmuka. (Paket dari antarmuka ini harus diizinkan memiliki alamat IP sumber yang tidak sesuai dengan alamat tujuan perutean antarmuka ini.)

Katakanlah antarmuka ini memiliki nama ens20.4, vlan-raw-device-nya ens20, dan antarmuka tujuan (untuk menguji aliran paket) dinamai ens20.2(meskipun itu harus bekerja untuk antarmuka tujuan apa pun).

Saya mencoba untuk menetapkan rp_filterproperti ens20.4hanya, tetapi tidak berhasil:

echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

Jadi, untuk tujuan pengujian, saya juga menonaktifkan rp_filterperangkat vlan-raw-dan antarmuka tujuan pengujian:

echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter

Masih tidak berhasil, paket dengan alamat IP sumber "palsu" masih dijatuhkan. Hanya jika saya menonaktifkan rp_filteruntuk semua antarmuka, paket bisa melalui:

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

Namun, saya masih ingin tetap menyaring jalur balik untuk semua antarmuka lainnya - apa yang saya lewatkan?

Cybran
sumber
Beberapa pengujian lebih lanjut mengungkapkan bahwa penyaringan jalur balik aktif jika rp_filter diatur ke 1 untuk semua antarmuka inbound atau semua. Masih mencari jawaban definitif atau referensi dokumentasi, yang sejauh ini belum dapat saya temukan.
Cybran

Jawaban:

12

Info di sana: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090

Perhatikan kalimat terakhir yang akan menjelaskan upaya Anda:

Nilai maksimal dari conf / {all, interface} / rp_filter digunakan ketika melakukan validasi sumber pada {interface}.

Jadi ini seharusnya bekerja:

for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > "$i"
done
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter

Sekarang maks (conf / {all, ens20.4} / rp_filter == 0: tidak ada validasi sumber. Cukup periksa ulang bahwa antarmuka lain masih dilindungi.

Anda juga dapat memeriksa "longgar" rpf dengan nilai 2. Jika paket biasanya harus dialihkan oleh antarmuka lain, itu akan lebih baik daripada tidak ada validasi.

AB
sumber
2
Terima kasih, itu menjelaskan dengan sangat baik! Terima kasih khusus untuk saran rpf "longgar", yang memang merupakan pilihan yang lebih baik untuk pengaturan saya. Juga membuatnya tidak perlu untuk mengatur semua / rp_filter ke 0, yang paling disambut.
Cybran