Bir arabirim getirilirken varsayılan bir yolun eklenmesini engelleyebilir miyim?


12

Üzerinde iki NIC bulunan bir sistemim var. Bu makine ve beraberindeki birkaç cihaz taşınacak ve farklı LAN'lara bağlanacak veya bazen çevirmeli bağlantı kullanılacaktır.

    eth0:
    - 10.x.x.x address space
    - no internet gateway
    - only a few devices

eth1 (when used):
- 172.16.x.x or 192.168.x.x or other address spaces
- access to the gateway from LAN to internet

ppp0 (when used):
- internet access through dialup using KPPP

(KPPP tarafından işlenen ppp0 dışında) arayüzleri yukarı veya aşağı getirmek için ifconfig kullanıyorum.

Önce eth1'i getirirsem, DHCP'den bir adres alır ve ağ geçidini alır ve LAN'a ve internete erişmekte sorun yaşamadan yönlendirmeye eklenir.

Eğer eth0'ı birinci veya ikinci olarak getirirsem, adresini alır ve varsayılan ağ geçidini adres alanı içinde ayarlar (10.xxx aralığında). Önce eth0 ve ikinci eth1'i getirirsem, varsayılan ağ geçidi hala 10.xxx aralığında tutulur.

Ne yaparsam yapayım, eth0 eth1'i geçersiz kılar ve rotadaki ağ geçidini "talep eder".

Eth0'ın ağ geçidini talep etmesini önlemenin ya da eth1'in (2. olarak getirilmişse) ağ geçidini kullandığından emin olmanın bir yolu var mı? Veya bir şekilde, hangi arabirimin ağ geçidinin diğerlerine göre kullanılması gerektiğine bir sıralamaya öncelik verebilir miyim?

Temelde et1'in varsayılan adres alanı ağ geçidinin etkin ve eğer değilse, ppp0'ın varsayılan ağ geçidi kullanıldığından emin olmak istiyorum. Eth0'ın varsayılan ağ geçidine sahip olmasını önlemek istiyorum.


Kullanmanın ifconfigherhangi bir DHCP etkileşimine neden olması tuhaf . Genellikle ifupbunu başlatarak yapar dhclient. Eth * arabirimleriniz muhtemelen sistem önyükleme işlemi, örneğin /etc/init.d/networkNetworkManager tarafından mı sunuluyor?
Mark Plotnick

@ MarkPlotnick: Bu önyükleme yaptıktan sonra ve "ifconfig eth1 up" (veya down veya eth0 ...) kullanıyorum. Yapmak istediğim şeylerin en basit şekli, 10.xxx adres alanı dışında herhangi bir yol eklenmeden eth0'ı getirmek olacaktır.
Tango

Yanıtlar:


5

DHCP sunucusu yapılandırması yanlış. Dünyanın geri kalanına yönlendirme sağlayamadığında varsayılan bir ağ geçidi seçeneği göndermemelidir. Bu seçeneği gönderirse, herhangi bir istemci, belirtilen varsayılan ağ geçidine herhangi bir bağlantı dışı hedef için paket gönderebileceğini varsayabilir.

Yani kutunuz DHCP tarafından söylendiğinde eth0'dan varsayılan ağ geçidini kullanmakta haklıdır. Çözüm, DHCP sunucunuzdan hatalı seçeneği kaldırmaktır.


Tamam, bu çok mantıklı. Ne yazık ki, DHCP sunucusu bir çok kontrol seçeneğine izin vermeyen bir DLink DNS-321'dir. Bir ağ geçidi eklemem gerekiyor gibi görünüyor. Bir şekilde kesmek ve yapılandırma dosyasını düzenlemek mümkün olup olmadığını görmek zorunda kalacak. Ancak, başka bir sorun: Neden her zaman 10.xxx DHCP sunucusundan ağ geçidini alıyor ve ağ geçidini her zaman diğer sunucudan almıyor?
Tango

1
Linux'un aynı yollar arasında nasıl seçim yaptığından emin değilim. Muhtemelen metriğe dayanmaktadır. Birden fazla varsayılan rotanız olduğunda yönlendirme tablonuzu gösterebilir misiniz?
Sander Steffann

Birden çok varsayılan yola izin vermez. Hayal kırıklığı, bir nedenden ötürü eth0'ın her zaman DHCP'yi dinlemesi ve ağ geçidini güncellemesidir. Eth1 ile ağ geçidini yalnızca dinleyen ve kullanan ilk ve tek arabirimse kullanır. Eth0'ın geçidi her zaman eth1'leri geçersiz kılmazsa, ben sadece bir senaryo yazardım, böylece eth0 büyüdüğünde, eth1 indirildi, sonra büyüdü.
Tango

DHCP istemcisinde neredeyse kodlanmış tuhaflık gibi geliyor. Hangisini kullanıyorsun? Alternatif olarak: sadece eth0 ve
eth1'i

D-Link DNS-321'de. Ama / var / logs / syslog'dan geçtim ve eth1 için DHCP'nin de her seferinde ağ geçidine gönderdiğini görebiliyorum. Eth1'in neden her zaman geçidi aldığını ve rotaya eklediğini ve eth1'in neden almadığını anlayamıyorum. Ben DHCP eth0 10.0.0.3 başlatmak ve daha sonra 10.0.0.2 kullanarak eth0 statik yapmak için aralığı sınırlamaya çalışacağız ve bu kaba DHCP sunucusunu yoksaymak için yol açar bakın.
Tango

16

Raspbian'da benzer bir sorunla karşılaştım (aşağıdaki çözümün Debian için de geçerli olacağını düşünüyorum). Raspberry Pi 3'te 2 NIC entegre edilmiştir: Wi-Fi ve Ethernet. Her ikisini de kullanıyorum, sırasıyla wlan0 ve eth0. wlan0 ev Wi-Fi ağıma bağlı ve internet erişimi bu arayüzden geliyor. Ayarlarını ev yönlendiricimden DHCP üzerinden alır. eth0 doğrudan Windows bilgisayarıma bağlı ve statik IP atanmış. Windows bilgisayarımda yapılandırmadım çünkü eth0 üzerinden internet erişimi yoktu.

Raspbian'da, dhcpcd arka plan programı ağ arabirimlerini yapılandırmaktan sorumludur. Statik IP'yi eth0 arayüzüne ayarlamak için, sonuna aşağıdaki satırlar eklenmiştir /etc/dhcpcd.conf:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1

Bu ayarlarla, dhcpcd 2 varsayılan rota oluşturdu ve eth0 üzerinden rota wlan0 üzerinden daha yüksek önceliğe sahipti:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.2.1     0.0.0.0         UG    202    0        0 eth0
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

İnternet erişimim yoktu, çünkü sistem bunu eth0 üzerinden yönlendirmeye çalıştı ve yukarıda da belirttiğim gibi internet erişimi yoktu.

Sorunu çözmek için for eth0 arayüzündeki nogatewayseçeneği kullandım /etc/dhcpcd.conf. Böylece eth0'a özgü yapılandırma şöyle görünmeye başladı:

interface eth0

static ip_address=192.168.2.2/24
static routers=192.168.2.1
static domain_name_servers=192.168.2.1
nogateway

Bu yapılandırmayı kaydettikten ve yeniden başlattıktan sonra eth0 üzerinden varsayılan bir rota yoktu:

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.254   0.0.0.0         UG    303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     303    0        0 wlan0
192.168.2.0     *               255.255.255.0   U     202    0        0 eth0

İnternet erişimi ortaya çıktı ve sorun çözüldü.


1
Bu benim durumumdu ve tam olarak çözümdü.
PNDA

Teşekkürler, nogatewayen son debian dağıtımlarına gitmenin yolu
Alessandro Dionisi

Raspbian Pi'de bu problemle yüzleşmenin ne kadar zor olduğunu hayal edemezsiniz ve sadece en zarif ve doğru çözümü verdiniz. Teşekkür ederim dostum.
TechNyquist

7

RHEL6 / Fedora 22'de aşağıdakiler test edilmiştir.

/ Etc / sysconfig / network-scripts / ifcfg-eth1 satırını ekleyin:

DEFROUTE=no

Eth1 yerine varsayılan yönlendirmenin istenmediği arabirimin adını yazın.

Bu, IPv4 sekmesinin altındaki "Bu bağlantıyı yalnızca kendi ağındaki kaynaklar için kullan" kutusunu işaretleyerek Ağ Yöneticisi GUI aracılığıyla da yapılabilir.

DEFROUTE = no, arabirim etkinleştirildiğinde yönlendirme tablosuna varsayılan yolun (hedef 0.0.0.0) eklenmesini engeller. yani. aşağıdaki giriş eklenmez.

Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         172.16.x.x      0.0.0.0         UG        0 0          0 eth1

1
Lütfen sorunu neden çözdüğünü açıklayın. Ve ne zaman çalışır. Bu Debian tabanlı dağıtımlar (sanırım) ama üzerinde çalışacak değil farklı arayüz adlandırma (veya hizmetlerin ağ için bir dağıtımdır kullanarak systemd) ile dağıtımlar üzerinde.
grochmal

1
Debian tabanlı sistemlerden daha çok Red Hat gibi.
ilkkachu

4

tamam, bu yüzden istediğiniz şey, makinenin eth0'ı getirdiğinde ve DHCP yoluyla bir adres aldığında asla varsayılan bir ağ geçidi getirmemesidir.

İşte çözüm:

Dosya düzenle:

/etc/dhcp/dhclient-up-hooks

ve şunlarla doldurun:

#!/bin/sh
## Prevent DHCP server on eth0 from forcing a default route on us

case ${interface} in
  eth0)
     printf "executing ip route delete default via $new_routers\n" 
     ip route delete default via $new_routers
  ;;
     *)
  ;;
esac

önce:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.4.1     0.0.0.0         UG    20     0        0 eth0
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

ifdown eth0'dan sonra, ifup eth0:

[root@centos7lab dhcp]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.4.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Bu, kurulduktan sonra ağ geçidiyle rotayı siler, yani varsayılan bir ağ geçidiyle başka bir yolu zaten silmiş demektir. Yoksa yanlış mı anladım?
Tango

eth0 getirdiğinde yalnızca DHCP istemcisinin oluşturduğu ağ geçidini siler, sistemde bulunan diğer ağ geçitlerini etkilemez. Açıklamanızdan, sorununuzu, bir anda iki eşzamanlı varsayılan ağ geçidi (biri eth0'da ve biri eth1'de) alıyorsunuz ve yönlendirme tablosuna bile koyulmadan önce eth0 için olandan kurtulmanız gerekiyor. Sorunun yapıldığı sırada rota -n çıktısını gönderirseniz varsayımı değiştirebilirim.
Ricardo

1

Dhcpclient.conf dosyasını düzenleyebilir ve uzak DHCP sunucusundan herhangi bir varsayılan yol istemezsiniz.

Yaptığımın küçük bir örneği ve benim durumum için çalışıyor

send host-name = "rastgele-hostname";

alt ağ maskesi, yayın adresi, zaman ofseti, arayüz-mtu, rfc3442-sınıfı-statik-yollar, ntp-sunucuları;

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.