Seperti yang Anda semua mungkin tahu, cache rute ipv4 telah dihapus dalam seri kernel Linux 3.6, yang berdampak serius pada routing multipath. Kode routing IPv4 (tidak seperti IPv6 satu) memilih hop berikutnya dengan cara round-robin, jadi paket dari IP sumber yang diberikan ke IP tujuan yang diberikan tidak selalu melalui hop berikutnya yang sama. Sebelum 3.6 cache routing memperbaiki situasi itu, seperti hop berikutnya, setelah dipilih, tetap di cache, dan semua paket lebih lanjut dari sumber yang sama ke tujuan yang sama akan melalui hop berikutnya. Sekarang hop selanjutnya dipilih kembali untuk setiap paket, yang mengarah ke hal-hal aneh: dengan 2 rute default biaya yang sama dalam tabel routing, masing-masing menunjuk ke satu penyedia internet, saya bahkan tidak dapat membuat koneksi TCP, karena SYN awal dan ACK akhir pergi melalui rute yang berbeda,
Apakah ada cara yang relatif mudah untuk mengembalikan perilaku normal dari multipath routing, sehingga hop selanjutnya dipilih per-aliran daripada per-paket? Apakah ada patch di sekitar untuk membuat IPv4 hop berikutnya berbasis hash, seperti untuk IPv6? Atau bagaimana Anda semua menghadapinya?
ip ro add 8.8.8.8/32 nexthop via 1.2.3.4 nexthop via 1.2.3.5
asumsi yang benar?Jawaban:
Jika memungkinkan, tingkatkan ke Kernel Linux> = 4.4 ....
Routing multipath berbasis hash telah diperkenalkan, yang dalam banyak hal lebih baik daripada perilaku pra 3.6. Berbasis aliran, mengambil hash IP sumber dan tujuan (port diabaikan) untuk menjaga jalur tetap untuk koneksi individu. Satu kelemahannya adalah saya percaya ada berbagai algoritma / mode konfigurasi yang tersedia sebelum 3.6, tetapi sekarang Anda mendapatkan apa yang Anda diberikan !. Anda dapat menggunakan mempengaruhi pilihan jalan
weight
.Jika Anda berada dalam situasi saya maka Anda sebenarnya menginginkannya
3.6 >= behaviour < 4.4
tetapi itu tidak lagi didukung.Jika Anda memutakhirkan ke> = 4.4 maka ini akan melakukan trik, tanpa semua perintah lain:
Atau dengan perangkat:
sumber
"Relatif mudah" adalah istilah yang sulit, tetapi Anda mungkin bisa
Telah ada diskusi di milis netfilter tentang topik ini di mana saya mencuri daftar dari:
1. Aturan perutean (RPDB dan FIB)
2. Aturan firewall (menggunakan ipset untuk memaksa mode "aliran" LB)
Anda mungkin ingin mengikuti diskusi milis netfilter untuk beberapa variasi di atas.
sumber
u32
mendapatkan parameter penting hash dan kemudian "label" yang ditugaskan untukip rule
'sipset
- itu hanya membuat set yang diisi menggunakan--add-set
dan cocok dengan menggunakan--match-set
- tetapi ini sebagian besar untuk koneksi dalam keadaan BARU. Untuk koneksi status ESTABLISHED tanda dicap pada paket menggunakan--restore-mark
parameterCONNMARK
target - arahan ini menyalin tanda koneksi ke paket. Tanda koneksi sebelumnya ditetapkan menggunakan--save-mark
dalamPOSTROUTING
rantai (di mana paket-paket milik koneksi BARU akan melewati). Tulisan itu kelihatannya terlalu berbelit-belit bagi saya, tetapi itu menyampaikan gagasan itu.