특정 장치를 NAT에서 제외

특정 장치를 NAT에서 제외

내 홈 네트워크는 현재 다음과 같습니다.

다음과 같이 재구성하고 싶습니다(ISP 스위치를 제거하고 STB를 스위치에 연결).

내 게이트웨이는 두 개의 이더넷 포트(NAT 수행, 내 LAN에 DHCP 및 DNS 제공)가 있고 GNU/Linux를 실행하는 PC입니다.

장애물은 ISP의 STB(케이블 박스와 유사하지만 이더넷 IPTV를 사용하는 셋톱박스)이다. DHCP 요청을 보내고 ISP 게이트웨이가 요청을 받으면 WAN IP 대신 내부 IP(10.xyz)로 응답합니다. 이러한 장치가 연결하려는 IPTV 포털은 내부 IP에서만 액세스할 수 있습니다.

따라서 효과적으로 해야 할 일은 게이트웨이가 특정 MAC 주소를 가진 장치에 대한 스위치(브리지?) 역할을 하도록 하는 것입니다.

나는 다음을 수행해야 한다고 생각합니다.

  • 소스 주소가 셋톱박스 MAC와 일치하는 패킷을 LAN에서 WAN 인터페이스로 직접 복사하려면 iptables 규칙을 추가하세요.
  • 대상 주소가 STB MAC과 일치하는 패킷을 WAN에서 LAN 인터페이스로 직접 복사하려면(즉, 위와 반대) iptables 규칙을 추가하세요.
  • 게이트웨이의 DHCP 서버가 STB의 DHCP 요청에 응답하지 않는지 확인하세요.
  • NAT 처리에서 STB MAC의 패킷을 제외하시겠습니까?
  • ARP 요청에 대해 걱정해야 합니까?

답변1

ebtables위의 질문에 답하기 위해 네트워킹 전문가 친구로부터 LAN과 WAN 인터페이스를 브리지한 다음 다음 을 사용하여 브리지할 대상을 필터링하라는 조언을 받았습니다 .

lan0: [add LAN IPs and use as LAN interface]
    eth0 (LAN)
    eth1 (WAN) [add WAN IPs and use as WAN interface]

# Forward traffic to/from STBs
ebtables -A FORWARD -i eth0 -o eth1 -s $STB_MAC -j ACCEPT
ebtables -A FORWARD -i eth1 -o eth0 -d $STB_MAC -j ACCEPT

# Allow DHCP responses
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j ACCEPT

# Allow ARP requests
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p arp --arp-ip-dst ! $LAN_SUBNET -j ACCEPT

# The WAN is not really part of the LAN
ebtables -A INPUT -i eth1 -j DROP
ebtables -A FORWARD -i eth1 -j DROP
ebtables -A FORWARD -o eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP

# Allow eth1 to be used to access the WAN
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -j DROP

그런데 이 경우에는 ISP 스위치가 포트 기반 VLAN 태깅(PC 포트용 VLAN 하나, STB 포트용 VLAN 하나)을 하고 있는 것으로 드러났습니다.

따라서 ISP 라우터를 제거하려면 다음이 필요합니다.

  1. 게이트웨이의 WAN 네트워크 카드에 두 개의 VLAN을 설정합니다.
  2. WAN IP 구성을 NIC에서 WAN VLAN(NAT 포함)으로 이동
  3. 게이트웨이 DHCP 서버의 블랙리스트 STB MAC 주소
  4. ISP의 내부 VLAN을 내 LAN에 브리지
  5. (선택 사항) LAN 패킷이 ISP VLAN으로 누출되는 것을 방지하기 위해 방화벽 규칙을 추가합니다.

이는 ISP DHCP 서버가 이미 STB의 DHCP 요청에만 응답하기 때문에 작동하므로 게이트웨이에 이를 블랙리스트에 추가하면 모든 DHCP 응답이 게이트웨이 또는 ISP DHCP 서버에서 응답됩니다. 를 사용하는 경우 dnsmasqdhcp-host=01:23:45:*:*:*,ignore를 들어 를 사용하여 블랙리스트를 작성할 수 있습니다 /etc/dnsmasq.conf.

그 밖의 모든 작업은 systemd-networkd 구성 파일을 사용하여 수행할 수 있습니다. - VLAN용 파일 생성 - WAN NIC의 일치하는 파일 에 항목으로 .netdev추가 - VLAN용 파일 생성 - LAN/STB 브리지용 파일 생성 - STB VLAN 및 LAN 추가 브리지할 NICVLAN.network.network.netdev


다음은 systemd-networkd 구성 파일의 전체 예제 세트입니다.

  • /etc/systemd/network/isp-link.network- WAN NIC의 네트워크 구성:

    여기서는 VLAN만 설정합니다. VLAN ID를 ISP에서 사용하는 ID로 변경하세요. 이 예에서는 1234를 WAN VLAN으로 사용하고 56을 내부(IPTV) VLAN으로 사용합니다.

    [Match]
    Name=eno1
    
    [Network]
    VLAN=eno1.1234
    VLAN=eno1.56
    
  • /etc/systemd/network/eno1.1234.netdev- WAN VLAN:

    [NetDev]
    Name=eno1.1234
    Kind=vlan
    
    [VLAN]
    Id=1234
    
  • /etc/systemd/network/eno1.56.netdev- IPTV용 ISP 내부 VLAN:

    [NetDev]
    Name=eno1.56
    Kind=vlan
    
    [VLAN]
    Id=56
    
  • /etc/systemd/network/home-bridge.netdev- ISP-VLAN/홈 LAN 브리징 장치:

    [NetDev]
    Name=br0
    Kind=bridge
    
  • /etc/systemd/network/home-bridge.network- 교량의 네트워크:

    여기서 DHCP 서버가 활성화되어 있지 않은지 확인하십시오. systemd-networkd에서는 무시할 MAC 블랙리스트 구성을 허용하지 않으므로 다른 DHCP 서버(예: dnsmasq)를 사용해야 합니다.

    [Match]
    Name=br0
    
    [Network]
    Address=192.168.0.1/24
    IPForward=yes
    IPMasquerade=yes
    DHCP=no
    DHCPServer=no
    
  • /etc/systemd/network/home-lan.network- LAN NIC용 네트워크 파일:

    [Match]
    Name=enp9s0
    
    [Network]
    Bridge=br0
    
  • /etc/systemd/network/isp-vlan-wan.network- 게이트웨이의 WAN 구성:

    이는 DHCP를 사용합니다. 정적 구성이 있는 경우 이를 // Address설정으로 변경합니다.GatewayDNS

    [Match]
    Name=eno1.1234
    
    [Network]
    IPForward=yes
    DHCP=yes
    
  • /etc/systemd/network/isp-vlan-internal.network- 내부 VLAN용 네트워크 파일:

    [Match]
    Name=eno1.56
    
    [Network]
    Bridge=br0
    
  • /etc/dnsmasq.conf- DHCP 서버 구성:

    # Disable DNS server - will be handled by systemd-networkd
    port=0
    
    # Enable and configure DHCP server
    dhcp-range=192.168.0.129,192.168.0.254,12h
    
    # Specify which interfaces to listen on
    listen-address=127.0.0.1
    listen-address=::1
    listen-address=192.168.0.1
    
    # Ignore DHCP requests from the STBs
    dhcp-host=01:23:45:*:*:*,ignore
    

관련 정보