Linux에서 동일한 서브넷에있는 두 개의 네트워크 인터페이스와 두 개의 IP 주소


22

최근에 두 개의 SSL / TLS 사이트를 실행할 수 있도록 하나의 Linux 호스트에 할당 된 동일한 서브넷에 두 개의 IP 주소가 필요한 상황이 발생했습니다. 첫 번째 접근 방식은 IP 앨리어싱 (예 : eth0 : 0, eth0 : 1 등)을 사용하는 것이었지만 네트워크 관리자는이 아이디어를 무너 뜨리는 보안을 위해 상당히 엄격한 설정을했습니다.

  1. DHCP 스누핑을 사용하며 일반적으로 고정 IP 주소를 허용하지 않습니다. 정적 주소 지정은 정적 DHCP 항목을 사용하여 수행되므로 동일한 MAC 주소는 항상 동일한 IP 할당을받습니다. 요청하면 스위치 포트 별로이 기능을 비활성화 할 수 있으며 그 이유가 있습니다 (고맙게도 네트워크 사람들과 좋은 관계를 유지하고 있으며 어렵지 않습니다).
  2. 스위치 포트에서 DHCP 스누핑을 비활성화 한 상태에서는 스위치에 MAC 주소 X에 IP 주소 Y가 허용된다는 규칙을 설정해야했습니다. 불행히도 MAC 주소 X 만 허용한다는 말의 부작용이있었습니다. IP 주소 Y. IP 앨리어싱을 위해서는 MAC 주소 X에 두 개의 IP 주소가 할당되어야하므로 작동하지 않습니다.

스위치 구성에서 이러한 문제를 해결할 방법이 있었지만 네트워크 관리자와 좋은 관계를 유지하기 위해 다른 방법을 찾았습니다. 두 개의 네트워크 인터페이스를 갖는 것은 다음 논리적 단계처럼 보였습니다. 고맙게도이 Linux 시스템은 가상 머신이므로 두 번째 네트워크 인터페이스를 쉽게 추가 할 수있었습니다 (재부팅하지 않고도 추가 할 수 있음). 몇 번의 키 입력으로 두 개의 네트워크 인터페이스가 작동하고 DHCP에서 IP 주소를 가져 왔습니다.

그러나 문제는 네트워크 관리자가 두 인터페이스의 ARP 항목을 (스위치에서) 볼 수 있지만 내가 처음으로 만든 네트워크 인터페이스 만 핑 또는 모든 종류의 TCP 또는 UDP 트래픽에 응답합니다.

많은 파고 파고 난 후 여기에 내가 생각해 냈습니다. 그것은 효과가있는 것처럼 보이지만 간단 해야하는 것처럼 많은 일을하는 것처럼 보입니다. 다른 아이디어가 있습니까?


1 단계 : 모든 인터페이스에서 ARP 필터링을 활성화합니다.

# sysctl -w net.ipv4.conf.all.arp_filter=1
# echo "net.ipv4.conf.all.arp_filter = 1" >> /etc/sysctl.conf

Linux 커널 문서의 네트워킹 /ip-sysctl.txt 파일에서 :

arp_filter - BOOLEAN
    1 - Allows you to have multiple network interfaces on the same
    subnet, and have the ARPs for each interface be answered
    based on whether or not the kernel would route a packet from
    the ARP'd IP out that interface (therefore you must use source
    based routing for this to work). In other words it allows control
    of which cards (usually 1) will respond to an arp request.

    0 - (default) The kernel can respond to arp requests with addresses
    from other interfaces. This may seem wrong but it usually makes
    sense, because it increases the chance of successful communication.
    IP addresses are owned by the complete host on Linux, not by
    particular interfaces. Only for more complex setups like load-
    balancing, does this behaviour cause problems.

    arp_filter for the interface will be enabled if at least one of
    conf/{all,interface}/arp_filter is set to TRUE,
    it will be disabled otherwise

2 단계 : 소스 기반 라우팅 구현

나는 기본적으로 http://lartc.org/howto/lartc.rpdb.multiple-links.html의 지시를 따랐 지만 그 페이지는 다른 목표를 염두에두고 작성되었지만 (ISP 두 명을 다루는 경우).

서브넷이 10.0.0.0/24이고 게이트웨이가 10.0.0.1이고 eth0의 IP 주소가 10.0.0.100이고 eth1의 IP 주소가 10.0.0.101이라고 가정하십시오.

/ etc / iproute2 / rt_tables에 eth0 및 eth1이라는 두 개의 새로운 라우팅 테이블을 정의하십시오.

... top of file omitted ...
1    eth0
2    eth1

이 두 테이블의 경로를 정의하십시오.

# ip route add default via 10.0.0.1 table eth0
# ip route add default via 10.0.0.1 table eth1
# ip route add 10.0.0.0/24 dev eth0 src 10.0.0.100 table eth0
# ip route add 10.0.0.0/24 dev eth1 src 10.0.0.101 table eth1

새 라우팅 테이블 사용시기에 대한 규칙을 정의하십시오.

# ip rule add from 10.0.0.100 table eth0
# ip rule add from 10.0.0.101 table eth1

기본 라우팅 테이블은 DHCP에 의해 이미 처리되었지만 (이 경우에는 반드시 필요한지 확실하지 않음) 기본적으로 다음과 같습니다.

# ip route add default via 10.0.0.1 dev eth0
# ip route add 130.127.48.0/23 dev eth0 src 10.0.0.100
# ip route add 130.127.48.0/23 dev eth1 src 10.0.0.101

그리고 짜잔! 모든 것이 잘 작동하는 것 같습니다. 두 IP 주소 모두에 핑을 보내면 정상적으로 작동합니다. 이 시스템에서 다른 시스템으로 핑을 보내고 핑이 특정 인터페이스를 사용하도록 강요하면 제대로 작동합니다 ( ping -I eth0 10.0.0.1, ping -I eth1 10.0.0.1). 그리고 가장 중요한 것은 IP 주소를 오가는 모든 TCP 및 UDP 트래픽이 예상대로 작동한다는 것입니다.


다시 말하지만, 내 질문은 : 더 좋은 방법이 있습니까? 이것은 겉보기에 간단한 문제에 대한 많은 작업처럼 보입니다.


업데이트 : 위의 솔루션이 불완전했습니다. 트래픽이 동일한 서브넷에 남아 있으면 문제가 해결되었지만 두 번째 인터페이스를 사용하는 다른 서브넷과의 통신은 제대로 작동하지 않습니다. 더 큰 구멍을 파기보다는 네트워크 관리자와 대화를 나누고 한 인터페이스에 여러 IP 주소를 허용하고 IP 앨리어싱 (예 : eth0 및 eth0 : 0)을 사용하도록했습니다.


기억해야 할 중요한 차이점은 IP가 인터페이스에 속해 있지 않고 컴퓨터에 속해 있다는 것입니다. 그것은,이 설정에 하나의 IP에 대한 하나의 인터페이스를 보내 올 그래서 따라서는 약간의 속임수가 필요 왜 하지 그렇게합니다.
MikeyB

이 경우 소스 라우팅이 필요하지 않다고 생각합니다. 스위치가 인터페이스로 전송 될 때만 arp 필터링이 적용되어야하고 포트에서 인터페이스를 찾아야하기 때문입니다. 나는 틀릴 수 있지만, 기계가 스위치쪽으로 데이터를 보낼 때 소스 필드의 IP (IP 헤더)가 검사되지 않고 패킷을 보내는 arp 만 검사됩니다.
AndreasM

MikeyB는 정확하며 소스 라우팅이 유일한 방법입니다. 머신은 동일한 서브넷에있는 한 트래픽을 전송하려는 아웃 바운드 인터페이스를 선택할 수 있습니다. IP가 실제로 해당 인터페이스에 있지 않은지 여부는 중요하지 않습니다.
Patrick

2
AndreasM : 들어오는 패킷은 문제가 아니라 나가는 패킷입니다. 소스 라우팅이 없으면 모든 발신 패킷이 기본 경로를 사용하며이 경로는 한 인터페이스 또는 다른 인터페이스에 바인딩됩니다. 나가는 패킷에 올바른 소스 IP 주소가 있더라도 해당 IP 주소가 해당 인터페이스의 MAC 주소에 속하지 않기 때문에 스위치의 필터가 나가지 못하게됩니다. 스위치는 클라이언트가 다른 클라이언트의 IP를 스푸핑하려고하는 것처럼 보입니다. (이것은 스마트 레이어 3 스위치입니다).
Scott Duckworth

IP 별칭은 더 이상 사용되지 않으며 해킹이며 실제를 반영하지 않으며 기본을 제거하면 모든 별칭이 중단됩니다. ipfrom iproute2을 사용 하여 동일한 인터페이스에 둘 이상의 주소를 추가 하십시오 .
pilona

답변:


8

예, 더 나은 방법은 적절한 비즈니스 사례를 구축하고 스위치에서 규칙을 완화하여 하나의 NIC에 여러 개의 IP를 가질 수 있도록하는 것입니다.

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