Saya memiliki sistem dengan dua antarmuka. Kedua antarmuka terhubung ke internet. Salah satunya ditetapkan sebagai rute default; efek sampingnya adalah jika suatu paket masuk pada antarmuka non-default-route, balasan dikirim kembali melalui antarmuka rute default. Apakah ada cara untuk menggunakan iptables (atau sesuatu yang lain) untuk melacak koneksi dan mengirim balasan melalui antarmuka asalnya?
51
dev
param dalamip rule
perintah, jadi menjalankanip rule add from <interface_IP> table isp2
up ip rule add from <interface_IP> table isp2
danup ip route add default via <gateway_IP> dev ppp0 table isp2
/ etc / network / interface Anda di bawah antarmuka yang relevan.dev <interface>
dariip rule
agar berfungsi pada kotak saya. Jika saya mengerti benar,dev <interface>
sedang memfilter paket yang entah bagaimana diatur pada antarmuka yang salah yang perlu diperebutkan ke antarmuka yang benar oleh rute yang diganti tetapi aturan penyaringan oleh antarmuka mencegah hal itu terjadi.dev <interface>
dariip rule
perintah agar ini berfungsi. Harap perbarui jawabannya! Kecuali untuk detail itu, itu bekerja seperti pesona. Terima kasih banyak, @Peter!Perintah berikut membuat tabel routing alternatif via
eth1
untuk paket yang memiliki tanda 1 (kecuali paket ke localhost). Theip
perintah dari iproute2 suite (Ubuntu: iproute Install iproute http://bit.ly/software-small , iproute-doc Install iproute-doc http://bit.ly/software-small ).Separuh pekerjaan lainnya adalah mengenali paket yang harus mendapatkan tanda 1; kemudian gunakan
iptables -t mangle -A OUTPUT … -j MARK --set-mark 1
pada paket-paket ini untuk membuatnya dirutekan melalui tabel routing 1. Saya pikir yang berikut ini harus melakukannya (ganti 1.2.3.4 dengan alamat antarmuka non-default-rute):Saya tidak yakin apakah itu cukup, mungkin aturan lain diperlukan pada paket yang masuk untuk memberi tahu modul conntrack untuk melacaknya.
sumber
Saya memiliki masalah dengan paket yang dihasilkan secara lokal dengan solusi yang disarankan oleh Peter, saya telah menemukan bahwa yang berikut ini mengoreksi bahwa:
CATATAN: Anda dapat mengalami masalah sintaksis dengan baris ke-4 di atas. Dalam kasus seperti itu sintaks untuk perintah ke-4 mungkin ini sekarang:
sumber
Saya berasumsi Anda menjalankan Linux dan, lebih lanjut, bahwa Anda menggunakan distribusi berbasis RedHat / CentOS. Unix dan distribusi lainnya akan memerlukan langkah yang sama - tetapi detailnya akan berbeda.
Mulailah dengan menguji (perhatikan bahwa ini sangat mirip dengan jawaban @ Peter. Saya berasumsi sebagai berikut:
Perintahnya adalah sebagai berikut:
Firewall tidak terlibat dengan cara apa pun. Paket balasan akan selalu dikirim dari IP yang benar - tetapi sebelumnya dikirim melalui antarmuka yang salah. Sekarang paket-paket ini dari IP yang benar akan dikirim melalui antarmuka yang benar.
Dengan anggapan hal di atas berfungsi, Anda sekarang dapat membuat aturan dan perubahan rute permanen. Ini tergantung pada versi Unix yang Anda gunakan. Seperti sebelumnya, saya mengasumsikan distribusi Linux berbasis RH / CentOS.
Uji bahwa perubahan jaringan itu permanen:
Jika itu tidak berhasil, pada versi RH / CentOS yang lebih baru Anda juga harus menggunakan salah satu dari dua opsi:
Secara pribadi saya lebih suka menginstal paket aturan karena ini adalah pendekatan yang lebih sederhana dan lebih didukung:
Rekomendasi kuat lainnya adalah mengaktifkan penyaringan arp karena ini mencegah masalah terkait lainnya dengan konfigurasi jaringan ganda. Dengan RH / CentOS, tambahkan konten berikut ke file /etc/sysctl.conf:
sumber