GNU/Linux >> Belajar Linux >  >> Linux

Perutean Sumber Linux, Model Sistem Akhir yang Kuat / Model Host yang Kuat?

Bisakah mesin Linux multihome mengimplementasikan Model Strong ES yang sebenarnya?

Kasus Penggunaan Khusus

Saya memiliki sistem dengan lima antarmuka yang berbeda, masing-masing terhubung ke subnet yang sama, sehingga merupakan gerbang yang sama ke Internet.

  • Saya ingin mendengarkan setiap antarmuka secara terpisah pada port yang sama, dan memastikan bahwa paket selalu keluar dari antarmuka yang sama dengan yang mereka masuki, dan memastikan bahwa paket yang mencoba masuk melalui antarmuka yang "salah" akan dibuang.
  • Saya ingin dapat mengikat ke setiap antarmuka dan membuat koneksi keluar ke tujuan Internet yang selalu berasal dari IP sumber yang sama dengan yang saya ikat. Misalnya,
    curl --interface interface_ip http://ipecho.net/plain

    harus selalu menunjukkan alamat IP yang sama dengan yang saya ikat dengan --interface .

  • Rute statis mungkin bermasalah karena menggunakan DHCP pada salah satu antarmuka ini.

RFC 1122

Dari RFC 1122 – Persyaratan untuk Host Internet – Lapisan Komunikasi, Bagian 3.3.4.2 – Persyaratan Multihoming:

Implementor host Internet telah menggunakan dua
model konseptual yang berbeda untuk multihoming, diringkas secara singkat
dalam diskusi berikut. Dokumen ini tidak
berdiri di atas model mana yang lebih disukai; masing-masing tampaknya memiliki
tempat. Ambivalensi ini tercermin dalam masalah (A)
dan (B) bersifat opsional.

  • Model ES yang Kuat

      Model Strong ES (End System, mis., host)
      menekankan perbedaan host/gateway (ES/IS),
      dan oleh karena itu akan menggantikan MUST untuk MAY dalam
      masalah (A ) dan (B) di atas. Ini cenderung memodelkan
      host multihome sebagai sekumpulan host logis dalam
      host fisik yang sama.

      Sehubungan dengan (A), pendukung model Strong ES
      mencatat bahwa mekanisme perutean Internet otomatis
      tidak dapat merutekan datagram ke
      antarmuka fisik yang tidak sesuai dengan
      alamat tujuan.

      Di bawah model Strong ES, perhitungan rute
      untuk datagram keluar adalah pemetaan:

         route(src IP addr, dest IP addr, TOS) -> gateway
    

    Di sini alamat sumber disertakan sebagai parameter
    untuk memilih gateway yang langsung
    dapat dijangkau pada antarmuka fisik yang sesuai.
    Perhatikan bahwa model ini secara logis mensyaratkan bahwa secara
    secara umum setidaknya ada satu gateway default, dan
    lebih disukai beberapa default, untuk setiap alamat
    IP sumber.

  • Model ES yang Lemah

      Pandangan ini tidak menekankan perbedaan ES/IS, dan oleh karena itu
      akan menggantikan MUST NOT untuk MAY dalam
      masalah (A) dan (B). Model ini mungkin lebih
      alami untuk host yang menggunakan protokol perutean gateway penyadapan
      , dan diperlukan untuk host yang memiliki
      fungsionalitas gerbang tertanam.

      Model ES yang Lemah dapat menyebabkan mekanisme Pengalihan
      gagal. Jika sebuah datagram dikirim ke antarmuka
      fisik yang tidak sesuai dengan
      alamat tujuan, gateway hop pertama
      tidak akan menyadari ketika perlu mengirim Redirect. Di
      sebaliknya, jika host memiliki fungsi
      gerbang tertanam, maka ia memiliki informasi perutean
      tanpa mendengarkan Pengalihan.

      Dalam model ES Lemah, perhitungan rute untuk
      datagram keluar adalah pemetaan:

         route(dest IP addr, TOS) -> gateway, interface
    
  • Linux adalah model ES Lemah secara default, sedangkan FreeBSD dan varietas Unix lainnya bertindak sebagai sistem ES Kuat. Apakah ada cara untuk membuatnya berperilaku lebih seperti sistem Strong ES?

    Apa sysctl atau konfigurasi waktu kompilasi perlu diatur untuk membuatnya berperilaku seperti ES Kuat secara default, tanpa menambahkan aturan perutean khusus untuk antarmuka baru apa pun yang Anda tambahkan? Saya tahu kita dapat melakukan penyaringan sumber-rute yang ketat melalui net.ipv4.conf.default.rp_filter = 1 , tapi sepertinya ada lebih dari itu. Bagaimana saya bisa melakukan Perutean Berbasis Sumber secara default?

    Jawaban yang Diterima:

    Hanya menambahkan aturan firewall tidak akan cukup untuk yang satu ini. Anda ingin sistem mengarahkan lalu lintas seolah-olah itu adalah dua sistem independen yang kebetulan berbagi perangkat keras dan proses yang sama:itulah Strong ES Model secara efektif.

    Terkait:Linux – halaman manual hanya ditemukan setelah dijalankan dengan root?

    Saat membidik Model ES Kuat di Linux, pertama-tama Anda memerlukan pengaturan sysctl ini:

    net.ipv4.conf.all.arp_filter=1 
    net.ipv4.conf.all.arp_ignore=1 # or even 2
    net.ipv4.conf.all.arp_announce=2
    

    Pengaturan ini akan membuat ARP berperilaku sesuai dengan Model ES Kuat, yaitu ketika permintaan ARP diterima, hanya antarmuka dengan alamat yang diminta yang akan menjawab, dan hanya jika lalu lintas ke alamat asal sebenarnya akan dikirim melalui spesifik itu. antarmuka.

    Kemudian, karena Anda memiliki lima antarmuka yang Anda inginkan untuk berperilaku berbeda dalam hal perutean, Anda harus menyiapkan lima tabel perutean khusus. Anda dapat menggunakan nomor untuk mengidentifikasi mereka, tetapi umumnya lebih jelas untuk menentukan nama untuk mereka. Jadi, pilih nomor untuk masing-masing antara 1 dan 252, dan beberapa nama yang cocok. (Nomor 0, 253, 254 dan 255 dicadangkan.)

    Sebagai contoh, mari kita pilih 100 =rtabel0, 101 =rtabel1, 102 =rtabel2, 103 =rtabel3 dan 104 =rtabel4. Tambahkan nomor dan nama ini di akhir /etc/iproute2/rt_tables berkas:

    # ...default stuff above...
    100    rtable0
    101    rtable1
    102    rtable2
    103    rtable3
    104    rtable4
    

    Kemudian, isi setiap tabel perutean khusus dengan set entri rute minimal yang sesuai untuk setiap antarmuka. (Saya mengganti nilai aktual dengan nama variabel lingkungan yang mudah-mudahan diberi nama deskriptif.)

    ip route add $ETH0_NET dev eth0 proto static src $ETH0_IP table rtable0
    ip route add default via $ETH0_GW dev eth0 proto static src $ETH0_IP table rtable0
    
    ip route add $ETH1_NET dev eth1 proto static src $ETH1_IP table rtable1
    ip route add default via $ETH1_GW dev eth1 proto static src $ETH1_IP table rtable1
    
    # ... and so on, for all 5 interfaces
    

    Terakhir, tambahkan aturan perutean lanjutan yang akan memeriksa alamat sumber setiap paket dan memilih tabel perutean yang akan digunakan:

    ip rule add from $ETH0_IP table rtable0
    ip rule add from $ETH1_IP table rtable1
    #...
    

    Untuk membuat semua konfigurasi ini bertahan selama reboot, Anda mungkin harus menulis skrip start-up khusus (atau mungkin ifup-pre atau ifup-post scripts) agar sesuai dengan konvensi distribusi Linux Anda.

    Untuk asuransi tambahan, Anda dapat menambahkan aturan iptables per antarmuka untuk secara diam-diam menjatuhkan paket masuk yang mungkin diterima pada antarmuka yang salah. Jika semuanya baik-baik saja, jumlah paket untuk ini akan tetap nol:jika mulai bertambah, Anda mungkin melewatkan sesuatu dalam konfigurasi.

    iptables -A INPUT -m addrtype --dst-type UNICAST -i eth0 ! -d $ETH0_IP -j DROP
    iptables -A INPUT -m addrtype --dst-type UNICAST -i eth1 ! -d $ETH1_IP -j DROP
    # ... and so on for each interface
    

    Catatan: Saya pernah menerapkan pengaturan seperti ini berdasarkan diskusi internet lama oleh Rick Jones dan pakar jaringan lainnya. Mereka berkata, diparafrasekan, “sementara semua ini jelas perlu untuk mencapai perilaku Model Host Kuat di Linux, saya tidak dapat menjamin bahwa itu cukup untuk semua kasus penggunaan yang mungkin”. Ini bekerja dengan sempurna untuk saya; itu mungkin atau mungkin tidak cukup untuk Anda, tergantung pada apa tepatnya Anda akan menggunakannya.

    Peringatan: pastikan Anda memiliki semacam akses konsol lokal atau jarak jauh ke sistem saat mengatur konfigurasi ini. Penyiapan ini kemungkinan besar akan mengacaukan akses jaringan Anda saat baru setengah jadi.

    Meskipun dimungkinkan untuk mengatur antarmuka N dengan hanya (N-1) tabel perutean khusus, preferensi pribadi saya adalah memindahkan semua konfigurasi perutean ke tabel khusus saat menggunakan perutean lanjutan. Memiliki route -n atau ip route show muncul pada dasarnya kosong sementara sistem jelas memiliki koneksi jaringan akan menjadi petunjuk yang sangat besar bahwa sesuatu yang sangat istimewa sedang terjadi. Namun demikian, ketika saya mengatur sistem seperti ini, saya juga mengatur pemberitahuan permanen di /etc/motd tentang penerapan perutean lanjutan, dan lokasi skrip aktual yang menyiapkannya.

    Terkait:Alias ​​​​untuk 'sudo /etc/init.d/'?
    Linux
    1. Kisah Linux saya:Meliputi open source dalam bahasa Spanyol

    2. Cara Mengubah Nama Host di Linux

    3. Perutean IP:Bendera Rute Linux (U – Atas, G – Gateway, H – Host)

    1. Identifikasi kemacetan kinerja Linux menggunakan alat sumber terbuka

    2. Buat SDN di Linux dengan open source

    3. Pengantar Sistem File Linux

    1. Persyaratan Sistem Kali Linux

    2. Perintah Shutdown Linux

    3. Cara Memeriksa Versi Linux