Linux 통과 경로

Linux 통과 경로

나는 두 개의 이더넷 인터페이스(eth0과 eth1이라고 부르겠습니다)와 하나의 WiFi 인터페이스(wlan0이라고 부르겠습니다)를 갖춘 매우 기본적인 Linux 시스템을 가지고 있습니다.

저는 여러가지 이유로아니요이 기기가 WiFi 인터페이스를 통해 직접 전화를 걸 수 있기를 바랍니다. 대신 eth0을 모든 것에 대한 관문으로 취급하기를 원합니다.

그러나 나는 이 머신의 LAN(즉, eth0을 통해 액세스 가능)에 있는 라우터가 이 머신의 WiFi 인터페이스를 다른 세계와의 브리지로 사용할 수 있기를 원합니다. 나와 동료들은 라우터가 패킷을 eth1의 이 컴퓨터로 다시 보낼 수 있고 이 컴퓨터가 패킷을 wlan0으로 전달할 수 있다는 생각을 했습니다. 마찬가지로 wlan0으로 들어오는 모든 패킷은 처리를 위해 즉시 eth1을 통해 로컬 라우터로 다시 전송됩니다.

우리는 전용 라우터가 더 나은 라우팅 결정을 내릴 수 있고 관련 Linux 시스템이 적절한 라우터가 되도록 가르치는 것보다 더 쉽다고 믿기 때문에 이 토폴로지를 채택했습니다. (WiFi 링크가 (a) 항상 온라인 상태가 아니고 (b) 나머지 세계로 연결되는 유일한 링크가 아니기 때문에 이것은 사소한 일이 아닙니다. 또한 (c) 해당 LAN의 다른 호스트는 WiFi 링크를 통해 연결하기를 원할 수도 있습니다. 또한 (d) 다른 호스트의 패킷도 이를 통해 전송될 수 있습니다.

이와 같은 두 인터페이스 간에 패킷을 라우팅하는 방법에는 여러 가지가 있다는 것을 알고 있습니다. 브리지 인터페이스를 사용하거나 iptables를 사용할 수 있습니다. 현재 저는 iptables 작업을 하고 있습니다. (기계가 좀 낡아서 nft를 못쓰네요.)

내가 확실하지 않은 것은 다음과 같습니다.

  1. eth1과 wlan0에는 자체 IP 주소가 필요합니까?
  2. 만약 그렇다면, 이 기계가 그것들을 직접 사용하는 것을 막는 것이 얼마나 어려울까요?

적어도 나는 다음과 같은 일을 할 수 있다고 상상합니다.

iptables -A FORWARD -i eth1 -o wlan0 -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth1 -j ACCEPT

좋다두 인터페이스 간의 iptables 전달. 이론적으로 이는 Linux 상자를 두 인터페이스 사이의 와이어로 바꾸어 어떤 방식으로든 검사하거나 변경하지 않고 모든 패킷을 맹목적으로 양방향으로 전달합니다.

하지만 이것이 순진해서 ARP가 제대로 작동하지 않거나 작동하지 않을까봐 걱정됩니다.

실제로 eth1과 wlan0에 IP 주소를 할당해야 할 수도 있습니다. 이렇게 하면 패킷을 전달할 때 (적어도) 패킷의 소스 주소를 다시 작성해야 할 것 같습니다. 답변에 따르면제가 링크한 질문은, 추가하는 것만큼 간단할 수 있습니다.

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

어쩌면 있을 수도 있지

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

내 iptables 레시피.

또한 이 두 인터페이스에 IP 주소를 할당하는 경우 로컬 Linux 시스템이 해당 주소를 다른 목적으로 사용하지 않도록 하고 싶습니다. eth1 및/또는 wlan0에 할당된 서브넷과 일치하는 것처럼 보이더라도 eth0을 통해 모든 것을 보내도록 라우팅 테이블에 명시적인 경로 없음 규칙을 만들어야 할 수도 있습니다.

이 작업을 수행하는 방법에 대한 제안 사항이 있는 사람이 있습니까? (또는 그것이 나쁜 생각이고 결코 작동하지 않을 것이라고 제안하지만, 그렇게 되기를 바랍니다.)

그건 그렇고, 이것은 글로벌 인터넷에 전혀 연결되지 않은 격리된 로컬 네트워크입니다. 모든 항목에는 사용할 수 있는 고정된 개인 주소가 있습니다. DHCP가 실행되지 않으며 NAT가 필요하지 않습니다.

답변1

내가 올바르게 이해했다면 기본적으로 NUC가 eth1과 wlan0 사이의 스위치 역할을 하길 원하시나요? 그렇다면 iproute2( ip link add type bridge ...) 또는 bridge-utils()를 사용하여 브리지를 생성 brctl addbr ...하고 두 인터페이스를 추가할 수 있습니다. 이러한 인터페이스에는 IP 주소를 할당할 필요가 없습니다. 이 경우 eth0은 IP 주소가 있는 유일한 인터페이스가 되며 유일한 활성 네트워크 인터페이스처럼 작동합니다.

관련 정보