인터페이스를 불러올 때 기본 경로가 추가되는 것을 방지 할 수 있습니까?


12

두 개의 NIC가있는 시스템이 있습니다. 이 기기와 함께 제공되는 일부 장치가 다른 LAN으로 이동하여 연결되거나 전화 접속을 사용하는 경우도 있습니다.

    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

ifconfig를 사용하여 인터페이스를 올리거나 내립니다 (KPPP에서 처리하는 ppp0 제외).

eth1을 먼저 가져 오면 DHCP에서 주소를 가져오고 게이트웨이를 가져와 라우팅에 추가되므로 LAN과 인터넷에 도달하는 데 문제가 없습니다.

eth0을 첫 번째 또는 두 번째로 가져 오면 주소를 가져오고 기본 게이트웨이를 주소 공간 내 (10.xxx 범위)로 설정합니다. eth0을 먼저 가져오고 eth1을 두 번째로 가져 오더라도 기본 게이트웨이는 여전히 10.xxx 범위 내로 유지됩니다.

따라서 내가 무엇을하든 eth0은 eth1을 무시하고 라우팅에서 게이트웨이를 "클레임"합니다.

eth0이 게이트웨이를 요구하지 못하게하거나 eth1 (두 번째로 가져온 경우)이 게이트웨이를 사용하도록하는 방법이 있습니까? 아니면 어떤 인터페이스의 게이트웨이가 다른 인터페이스보다 우선 순위를 매길 수 있습니까?

기본적으로 eth1의 기본 주소 공간 게이트웨이가 활성화되어 있는지 확인하고, 그렇지 않으면 ppp0의 기본 게이트웨이가 사용되도록하고 싶습니다. eth0에 기본 게이트웨이가없는 것을 막고 싶습니다.


사용 ifconfig하면 모든 종류의 DHCP 상호 작용이 발생할 수 있습니다. 일반적으로 ifup시작하여이 작업을 수행합니다 dhclient. eth * 인터페이스가 시스템 부팅 프로세스 (예 /etc/init.d/network:) 또는 NetworkManager에 의해 제공되고 있습니까?
Mark Plotnick

@MarkPlotnick : 부팅 한 후 "ifconfig eth1 up"(또는 down 또는 eth0 ...)을 사용하고 있습니다. 내가 원하는 것의 가장 간단한 형태는 10.xxx 주소 공간 이외의 경로를 추가하지 않고 eth0을 가져 오는 것입니다.
Tango

답변:


5

DHCP 서버 구성이 잘못되었습니다. 다른 지역으로 라우팅을 제공 할 수없는 경우 기본 게이트웨이 옵션을 보내면 안됩니다. 이 옵션을 전송하면 모든 클라이언트가 오프 링크 대상에 대한 패킷을 지정된 기본 게이트웨이로 전송할 수 있다고 가정 할 수 있습니다.

따라서 DHCP가 알려 주면 eth0의 기본 게이트웨이를 사용할 수 있습니다. 해결책은 DHCP 서버에서 잘못된 옵션을 제거하는 것입니다.


알겠습니다. 불행하게도 DHCP 서버는 DLink DNS-321이며 많은 제어 옵션을 허용하지 않습니다. 게이트웨이를 포함해야합니다. 어떻게 든 해킹하고 구성 파일을 편집 할 수 있는지 확인해야합니다. 그러나 한 가지 다른 문제 : 왜 항상 10.xxx DHCP 서버에서 게이트웨이를 가져오고 다른 서버에서 게이트웨이를 가져 가지 않는가?
Tango

1
리눅스가 동일한 경로 중에서 어떻게 선택하는지 잘 모르겠습니다. 아마 메트릭을 기반으로합니다. 기본 경로가 여러 개인 경우 라우팅 테이블을 표시 할 수 있습니까?
샌더 스테판

여러 개의 기본 경로를 허용하지 않습니다. 좌절은 어떤 이유로 eth0이 항상 DHCP를 수신하고 게이트웨이를 업데이트한다는 것입니다. eth1에서는 게이트웨이가 작동하는 최초이자 유일한 인터페이스 인 경우에만 게이트웨이를 수신하고 사용합니다. eth0의 게이트웨이가 항상 eth1을 재정의하지는 않았 으면 스크립트를 작성하여 eth0이 나타 났을 때 eth1이 중단 된 다음 시작되었습니다.
Tango

DHCP 클라이언트에서 하드 코딩 된 이상 함과 거의 같습니다. 어느 것을 사용하고 있습니까? 대안으로 : 그냥 스왑 eth0를하고 eth1를보다 쉽게 수 있습니다)
샌더 Steffann

D-Link DNS-321에 있습니다. 그러나 / var / logs / syslog를 살펴본 결과 eth1의 DHCP도 매번 게이트웨이로 전송됩니다. 나는 왜 eth1이 항상 게이트웨이를 가져 와서 경로에 추가하고 eth1은 그렇지 않은지 알 수 없습니다. DHCP eth0이 10.0.0.3에서 시작하는 데 사용하는 범위를 제한 한 다음 10.0.0.2를 사용하여 eth0을 정적으로 만들고 무례한 DHCP 서버를 무시하는지 확인합니다.
Tango

16

Raspbian에서 비슷한 문제에 직면했습니다 (아래 솔루션이 Debian에도 적용될 수 있다고 가정합니다). Raspberry Pi 3에는 Wi-Fi 및 이더넷의 두 NIC가 통합되어 있습니다. 나는 둘 다 사용하며 각각 wlan0과 eth0입니다. wlan0이 내 홈 Wi-Fi 네트워크에 연결되어 있고 인터넷 연결이이 인터페이스를 통해 이루어집니다. 내 홈 라우터에서 DHCP를 통해 설정을 가져옵니다. eth0이 내 Windows PC에 직접 연결되어 있고 고정 IP가 할당되어 있습니다. Windows PC에서 구성하지 않았기 때문에 eth0을 통한 인터넷 액세스가 가능하지 않습니다.

Raspbian에서 dhcpcd 데몬은 네트워크 인터페이스 구성을 담당합니다. 정적 IP를 eth0 인터페이스로 설정하기 위해 다음 행이 끝에 추가되었습니다 /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

이 설정으로 dhcpcd는 2 개의 기본 라우트를 작성했으며 eth0을 통한 라우트는 wlan0을 통한 라우트보다 우선 순위가 높았습니다.

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

그래서 위에서 언급했듯이 시스템은 eth0을 통해 라우팅하려고 시도했지만 인터넷에 액세스 할 수 없었기 때문에 인터넷에 액세스 할 수 없었습니다.

문제를 해결하기 위해 for eth0 인터페이스의 nogateway옵션을 사용 했습니다 /etc/dhcpcd.conf. 따라서 eth0 관련 구성은 다음과 같이 시작되었습니다.

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

이 구성을 저장하고 재부팅 한 후 eth0을 통한 기본 경로는 없었습니다.

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

인터넷 액세스가 나타 났으며 문제가 해결되었습니다.


1
이것이 바로 제 상황이며, 이것이 바로 해결책이었습니다.
PNDA

감사합니다, nogateway최신 데비안 배포판에 갈 수있는 방법입니다
알레산드로 Dionisi

Raspbian Pi 에서이 문제에 직면하는 번거 로움을 상상할 수 없으며 가장 우아하고 올바른 해결책을 제시했습니다. 고마워요.
TechNyquist

7

RHEL6 / Fedora 22에서 다음이 테스트되었습니다.

/ etc / sysconfig / network-scripts / ifcfg-eth1에서 다음 줄을 추가하십시오 :

DEFROUTE=no

기본 라우팅을 원하지 않는 인터페이스 이름으로 eth1을 바꾸십시오.

IPv4 탭의 하단에있는 "네트워크의 리소스에만이 연결 사용"확인란을 선택하여 Network Manager GUI를 통해이를 수행 할 수도 있습니다.

DEFROUTE = no는 인터페이스가 사용 가능한 경우 기본 경로 (대상 0.0.0.0)를 라우팅 테이블에 추가하지 못하게합니다. 즉. 다음 항목은 추가되지 않습니다.

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
문제가 해결되는 이유를 설명하십시오. 그리고 그것이 작동 할 때. 데비안 기반 배포판에서 작동하지만 다른 인터페이스 이름을 가진 배포판 (또는 서비스 네트워킹을 위해 systemd를 사용하는 배포판 )에서는 작동 하지 않습니다 .
grochmal

1
데비안 기반 시스템보다 Red Hat과 유사합니다.
ilkkachu

4

좋아, 그래서 당신이 원하는 것은 기계가 eth0을 가져오고 DHCP를 통해 주소를 가져올 때 기본 게이트웨이를 가져 오지 않는 것입니다.

해결책은 다음과 같습니다.

파일 편집 :

/etc/dhcp/dhclient-up-hooks

다음과 같이 채우십시오.

#!/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

전에:

[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 후 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

이렇게하면 게이트웨이가 설정된 후 경로가 삭제됩니다. 즉, 기본 게이트웨이가있는 다른 경로는 이미 지워졌습니다. 아니면 내가 오해합니까?
Tango

eth0을 가져올 때 DHCP 클라이언트가 만든 게이트웨이 만 삭제하며 시스템에 이미있는 다른 게이트웨이에는 영향을 미치지 않습니다. 귀하의 설명에서 귀하의 문제는 한 번에 두 개의 동시 기본 게이트웨이 (eth0에 하나와 eth1에 하나)가 있고 라우팅 테이블에 배치되기 전에 eth0에 대한 게이트웨이를 제거해야한다고 가정합니다. 문제가 발생했을 때 route -n 출력을 게시하면 내 가정이 바뀔 수 있습니다.
Ricardo

1

dhcpclient.conf 파일을 편집 할 수 있으며 원격 DHCP 서버에서 기본 경로를 요청하지 않아도됩니다.

내가 한 일의 작은 샘플과 내 사건에 효과가 있습니다.

send host-name = "random-hostname";

서브넷 마스크, 브로드 캐스트 주소, 시간 오프셋, 인터페이스 -mtu, rfc3442-classless-static-routes, ntp-servers 요청;

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.