시작 시 두 개의 서로 다른 네트워크에 있는 두 개의 네트워크 카드에 대한 라우팅 테이블 설정

시작 시 두 개의 서로 다른 네트워크에 있는 두 개의 네트워크 카드에 대한 라우팅 테이블 설정

eth0나는 두 개의 NIC, 즉 하나는 이더넷( )이고 다른 하나는 무선( wlan0) 을 갖춘 Debian(Raspbian) 파생 제품을 실행하는 컴퓨터를 가지고 있습니다 . eth0고정 주소를 사용하여 머신을 개인 LAN에 연결하고, wlan0머신을 인터넷에 연결하고 wpa_supplicant를 구성합니다. 추가 구성 없이 LAN에서 라우터를 ping할 수 있지만 google.com을 ping할 수는 없습니다. 몇 가지 조사 끝에 이를 달성하는 가장 깔끔한 방법은 사용자 지정 경로 테이블을 설정하는 것이라고 결정했습니다. 라우팅 규칙은 LAN 네트워크에서 들어오고 나가는 모든 트래픽을 라우팅하며 eth0, 다른 모든 트래픽은 LAN 네트워크를 통과합니다 wlan0. 이 논리가 틀렸다면 정정해주세요.

이를 수행하기 위해 라우팅 테이블을 설정하는 방법을 알아냈습니다. 명령을 사용하여 규칙을 수동으로 설정할 때 작동하도록 할 수 있습니다 ip route. 문제는 post-up인터페이스 파일의 명령을 사용하여 인터페이스를 불러올 때 라우팅 테이블을 설정할 수 없는 것 같습니다.

처음부터 내 사고방식을 설명하자면...

route -n추가 구성 없이 출력된 결과입니다.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         10.109.48.1     0.0.0.0         UG    303    0        0 wlan0
10.109.48.0     0.0.0.0         255.255.240.0   U     303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

제가 아는 한, 양측 간 의사소통에 갈등이 있는 것으로 알고 있습니다."어떤 목적지"eth0, 이는 더 낮은 메트릭을 갖기 때문에 를 사용하여 해결됩니다 . 이렇게 하면 모든 아웃바운드 트래픽이 통과할 수 있습니다 eth0. 이상적으로는 LAN으로 들어오고 나가는 트래픽만 통과해야 합니다 eth0. 그래서 기본 생성 규칙을 제거하고 네트워크 대상과 게이트웨이를 지정하는 규칙을 만들면 원하는 동작을 얻을 수 있다고 생각했습니다. 설명에 따라 기본 라우팅 규칙을 제거하고 새 규칙을 추가하기 위해 몇 가지 명령을 실행한 후 다음과 같은 라우팅 테이블을 얻었습니다.

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.109.48.1     0.0.0.0         UG    303    0        0 wlan0
10.109.48.0     0.0.0.0         255.255.240.0   U     303    0        0 wlan0
192.168.0.0     192.168.0.1     255.255.255.0   UG    0      0        0 eth0

그런 다음 LAN의 게이트웨이와 google.com에 ping을 보낼 수 있습니다. 그래서 내 직감이 맞았던 것 같다. 이것이 단지 우연이라면 정정해 주십시오.

라우팅 규칙을 영구적으로 만들기 위해 내가 찾은 많은 가이드와 Serverfault 답변은 post-up인터페이스 파일에서 명령을 사용하는 것이 이를 수행하는 가장 좋은 방법임을 나타냅니다. 그래서 아래와 같이 인터페이스 파일을 편집했습니다.

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
    address 192.168.0.10
    network 192.168.0.0
    netmask 255.255.255.0
    gateway 192.168.0.1
    up ip route delete via 192.168.0.1 dev eth0
    up ip route delete 192.168.0.0/24 via 0.0.0.0 dev eth0
    up ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0

allow-hotplug wlan0
iface wlan0 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

allow-hotplug wlan1
iface wlan1 inet manual
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

재부팅 후에도 라우팅 테이블은 기본값과 동일하게 유지됩니다. boot.log에는 ifup eth0발생한 오류가 표시되지 않습니다. 이러한 문제의 원인이 무엇인지 모르겠습니다.

답변1

그래서 제 문제는 개념적인 문제가 아니라 제가 지식을 얻는 가이드가 매우 구식이라는 것입니다. 이 질문은 다음 범주에 속합니다.시스템이 다시 공격합니다!.

현재 Raspbian 배포판은 systemd를 사용하는 Debian Jessie를 따릅니다. systemd는 모든 것을 따르지는 않지만 /etc/network/interfaces생성된 규칙을 사용합니다 /etc/dhcpcd.conf. Systemd는 주소 지정이 정적인지 동적인지에 관계없이 모든 인터페이스 구성을 기반으로 합니다 /etc/dhcpcd.conf.

원하는 동작을 얻으려면 먼저 다음 을 제외한 eth0모든 /etc/network/interfaces구성을 제거했습니다.

allow-hotplug eth0
iface eth0 inet static

interface eth0그러다가 그 부분을 편집했는데 /etc/dhcpcd.conf...

interface eth0
static ip_address=192.168.0.10

내가 설정하지 않았음을 참고하세요 static router=192.168.0.1. 이렇게 하면 default via 192.168.0.1 dev eth0내가 원하지 않는 경로가 생성됩니다 (wlan0의 기본 경로와 충돌하기 때문입니다).

이제 최소한의 구성으로 두 인터페이스를 모두 사용하여 해당 네트워크를 통해 통신할 수 있습니다.

관련 정보