두 개의 이더넷 포트가 있는 임베디드 시스템이 있습니다. 이 두 포트는 Linux 시스템의 서로 다른 두 이더넷 포트에 연결됩니다. Linux 상자에는 WAN에 연결된 세 번째 포트도 있습니다.
설정은 다음과 같습니다
_________________
eth0 ---- USB2ETH adapter-------(ethusb0)------------------| |
(IP: 192.168.2.50) (IP: 192.168.2.1) | Linux |
(Netmask: 255.255.255.0) (Netmask: 255.255.255.0) | Box |-------ethext0----WAN
| |
eth1----USB2ETH adapter--------(ethusb1)-------------------|_________________|
(IP: 192.168.3.50) (IP: 192.168.3.1)
(Netmask: 255.255.255.0) (Netmask: 255.255.255.0)
두 인터페이스는 서로 다른 도메인에 있지만 위에 표시된 것과 같이 동일한 넷마스크를 갖습니다.
ethusb0 및 ethusb1은 dhcp 서버를 실행합니다. 그에 따라 /etc/dhcp/dhcpd.conf를 업데이트했으며 eth0과 eth1에 IP 주소가 할당되었습니다.
Linux 시스템에서는 ethusb0에서 ethext0으로 패킷을 수락하고 전달하도록 iptables를 설정했습니다.
sudo iptables --policy FORWARD ACCEPT
sudo iptables -A FORWARD -i ethusb0 -o ethext0 -j ACCEPT
sudo iptables -A FORWARD -i ethext0 -o ethusb0 -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o ethext0 -j MASQUERADE
ethusb1에도 비슷한 iptables 설정이 있습니다.
Linux 시스템에서는 dns-nameservers를 추가하여 ethusb0 및 ethusb1에 대한 /etc/network/interfaces도 업데이트했습니다. 서버 주소가 192.0.3.3이라고 가정합니다.
이제 임베디드 시스템의 두 포트 모두에서 DNS 서버를 ping할 수 있습니다. 서버 이름에 대해 nslookup을 수행하면 대부분 성공합니다.
ethusb0과 ethext0wireshark를 모니터링했는데 nslookup 요청과 응답을 볼 수 있습니다. 요청은 ethusb0에서 수신되어 ethext0으로 전달되고 ethext0에서 ethusb0으로 응답됩니다.
또한 iptables에서 이러한 인터페이스에 대한 전달 통계 카운터를 확인하여 다시 확인했습니다.
질문:
이제 자주 묻는 질문으로 넘어갑니다. 때때로 nslookup이 실패합니다. 쿼리 패킷은 ethusb0에서 수신되지만 ethext0으로 전달되지 않습니다. 이는 Wireshark 및 iptables 통계를 모니터링하여 확인되었습니다. 그러나 다음 nslookup 쿼리는 성공적으로 작동합니다.
추가로 조사한 결과 임베디드 시스템 측에서 나오는 nslookup 쿼리 프레임에서 변칙적인 현상을 발견했습니다. eth0에서 전송된 프레임의 MAC 주소는 eth0이지만 IP 주소는 eth1입니다. 그러한 프레임에 대해서만 전달 규칙이 위반됩니다.
우선, 쿼리 패킷에 일치하지 않는 MAC 주소와 IP 주소가 포함된 이유를 알거나 이해하지 못합니다. 일반적으로 패킷을 전송/수신하기 위해 동일한 인터페이스가 선택됩니다. 인터페이스(예: eth0)를 닫고 열 때만 다른 인터페이스가 선택됩니다.
둘째, 패킷이 전달되지 않는 이유를 잘 모르겠습니다. 나는 Linux 시스템이 이러한 패킷을 삭제하게 만드는 일종의 MAC 대 IP 주소 확인이 있다고 의심합니다. 그러나 iptables는 삭제된 패킷 수를 보고하지 않습니다.
나는 같은 것을 확인했다 nslookup에 특정 인터페이스를 사용하도록 지시 그러나 이것은 도움이 되지 않습니다.
지금까지 시도한 것들은
- 서브넷 마스크가 다르지만 여전히 문제가 발생함
- 그러나 인터페이스가 동일한 도메인(192.168.2.x 및 192.168.2.y)에 있으면 이 문제가 발생하지 않습니다.
iptables에 다른 규칙을 추가해야 하는지, 아니면 임베디드 시스템 측의 인터페이스를 다르게 구성해야 하는지 알려줄 수 있는 사람이 있나요?
답변1
개인 인터페이스에 대한 역방향 경로 필터링을 비활성화하거나 느슨한 모드로 설정하면 문제를 해결할 수 있습니다.
echo 2 > /proc/sys/net/ipv4/conf/ethusb0/rp_filter
echo 2 > /proc/sys/net/ipv4/conf/ethusb1/rp_filter