Linux: Seçtiğiniz IP adresine bağlayan bir program yürütmenin kullanışlı bir yolu var mı?


11

FreeBSD 4.9'da sadece tek bir komutla başarmak çok kolaydı.

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

yol /her zamanki gibi aynı programı çalıştırıyor olsaydı, ancak tüm ağ iletişimi yalnızca kaynak olarak verilen IP adresini kullanmakla sınırlandırıldı. Bazen çok kullanışlıdır.

Şimdi Linux'ta, FreeBSD'nin jail(veya Solaris'in bölgelerine) çok benzeyen LXC var - bir programı yürütmek için benzer bir yol düşünebilir misiniz?


Bunu hangi programla yapmaya çalışıyorsunuz? Pek çok program edilebileceğini yapılandırılabilir yeterli söyledi için bağlama için hangi IP.
Warren Young

@WarrenYoung, Teşekkürler KO, ama "çok"! = "Hepsi"
poige

Bir yürütülebilir dosyayı belirli bir IP'yi kullanmak üzere "hapsetmek" için iyi bir kullanım durumu, bir LAN tarafındaki bir makinede birden fazla oyun sunucusu çalıştırmaktır. Valf oyunları sadece 27015-27020 numaralı bağlantı noktalarında yayınlanmaktadır, bu nedenle IP başına sadece 6 sunucunuz olabilir. Bu nedenle NIC'ye sanal IP'ler eklersiniz ancak oyun sunucusunun komut satırında "+ ip <adres>" ifadesini belirtmeniz gerekir; bu, varlığını istemcilere yayınlamayı durdurur => LAN tarayıcısında görünür sunucu yok. Yani "+ ip" çalışmaz. Bu nedenle, her sunucuyu yalnızca 1 IP adresi bulabileceği bir ortamda tutuklamalıyız. Sonuç: #servers + istemcisinde sınır yok, tüm sunucuları görüyor.
Timmos

Yanıtlar:


12

İşlemi yalnızca istenen IP adresini görebilen bir ağ ad alanı içinde başlatmak benzer bir şey başarabilir. Örneğin, sadece belirli bir program için localhost istedim.

İlk olarak, ağ ad alanını oluşturuyorum:

ip netns add limitednet

Ad alanları varsayılan olarak bir geri döngü arabirimine sahiptir, bu yüzden bir sonraki adımda onu büyütmem gerekiyor:

sudo ip netns exec limitednet ip link set lo up

Şimdi, kullanarak bir program çalıştırabilir ip netns exec limitednetve sadece geridöngü arayüzünü görebilecek:

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

Bunu localhost dışında bir adresle sınırlamak istersem, aşağıdakileri kullanarak ad alanına başka arabirimler ekleyebilirim:

ip link set DEVICE_NAME netns NAMESPACE

Bir arabirimin birden fazla IP adresine sahip olması durumunda bir ad alanına nasıl tek bir IP adresi ekleyeceğinizi anlamak için biraz daha denemek zorundayım

İsim alanlarındaki LWN makalesi de faydalıdır.


Ancak, ağ ad alanının kendi yönlendirme tablosu ve benzeri olduğu için çok daha fazla hazırlık gerektireceğini belirtmek gerekir. Birisi taklit etmek için daha basit bir yolla gelirse jail, onu kullanacağım. ;)
poige
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.