Linux: Apakah ada cara praktis untuk menjalankan program yang mengikatnya ke alamat IP pilihan?


11

Dalam FreeBSD 4.9 sangat mudah untuk dicapai hanya dengan satu perintah saja

jail [-u username]  path hostname ip-number command

jika path adalah /Anda telah menjalankan program yang sama seperti biasa tetapi semua komunikasi jaringannya dibatasi hanya menggunakan alamat IP yang diberikan sebagai sumber. Terkadang ini sangat berguna.

Sekarang di Linux ada LXC, yang memang terlihat sangat mirip dengan FreeBSD jail(atau zona Solaris) - dapatkah Anda memikirkan cara yang mirip untuk menjalankan suatu program?


Program apa yang Anda coba lakukan dengan ini? Banyak program yang cukup dapat dikonfigurasi sehingga mereka dapat mengetahui IP mana yang diikat.
Warren Young

@ WarrenYoung, Terima kasih KO, tapi "banyak"! = "Semua"
poige

Kasus penggunaan yang baik untuk "memenjarakan" yang dapat dieksekusi untuk menggunakan IP tertentu menjalankan beberapa server game pada satu mesin di pihak LAN. Misalnya, game Valve hanya mengudara pada port 27015-27020 sehingga per IP Anda hanya dapat memiliki 6 server. Jadi Anda menambahkan IP virtual pada NIC tetapi kemudian Anda harus menentukan "+ ip <alamat>" pada baris perintah server permainan yang berhenti menyiarkan kehadirannya ke klien => tidak ada server yang terlihat di browser LAN. Jadi "+ ip" tidak akan berfungsi. Karena itu kita perlu mem-jailbreak setiap server di lingkungan yang hanya dapat menemukan 1 alamat IP. Hasil: tidak ada batasan dalam #server + klien melihat semua server.
Timmos

Jawaban:


12

Memulai proses di dalam namespace jaringan yang hanya dapat melihat alamat IP yang diinginkan dapat mencapai hal serupa. Misalnya, saya hanya ingin localhost tersedia untuk program tertentu.

Pertama, saya membuat namespace jaringan:

ip netns add limitednet

Namespace memiliki antarmuka loopback secara default, jadi selanjutnya saya hanya perlu memunculkannya:

sudo ip netns exec limitednet ip link set lo up

Sekarang, saya bisa menjalankan program menggunakan ip netns exec limitednetdan itu hanya akan dapat melihat antarmuka loopback:

sudo ip netns exec limitednet ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Jika saya ingin membatasi ke alamat selain localhost, saya bisa menambahkan antarmuka lain ke namespace menggunakan:

ip link set DEVICE_NAME netns NAMESPACE

Saya harus bereksperimen sedikit lebih untuk mencari cara menambahkan alamat IP tunggal ke dalam namespace dalam kasus di mana antarmuka mungkin memiliki lebih dari satu alamat IP

The Artikel LWN di ruang nama juga membantu.


Tetapi perlu disebutkan itu akan membutuhkan persiapan yang lebih banyak karena namespace jaringan memiliki tabel routing sendiri dan seterusnya. Jika seseorang datang dengan cara meniru yang lebih sederhana jail, saya akan menggunakannya. ;)
poige
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.