NAT 규칙이 작동하지 않습니다

NAT 규칙이 작동하지 않습니다

내 호스트에서 다음이 발생합니다.

      veth5
     10.0.0.3
        o  
        |
   ------------    -----------------                    eth0
   |   br0    |----|--o         o--|----o           o------o------ internet
   ------------    | veth3   veth6 | veth7         ppp0
                   |               |            192.168.0.2                    |   namespace   |
                   -----------------

라우팅 구성은 정책 기반 라우팅을 사용하여 수행됩니다. 이에 따르면 호스트에서 인터넷으로 전송된 패킷(예: ping 사용)은 veth5를 통해 내 네트워크로 들어간 다음 네임스페이스로 들어갑니다. 여기에서 veth7로 전달된 다음 ppp0으로 전달되어 인터넷으로 전달됩니다.

ppp0 IP(192.168.0.2)를 사용하여 모든 내부 IP 주소를 가장하도록 NAT 규칙을 구성하고 싶습니다. 그런 다음 iptables를 사용하여 규칙을 추가했습니다.

$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

그러나 내 패킷은 eth0위의 규칙에 따라 위장되지 않고 도착합니다.

편집하다

vethW 및 eth0에 대한 tcmpdump 출력은 다음과 같습니다.

tcpdump_output_veth tcpdump_output_eth

출력 ip link:

IP 링크

출력 ip -4 addr:

IP -4 주소

출력 conntrack -L:

  • 호스트에서 인터넷 핑(ping)

여기에 이미지 설명을 입력하세요.

  • 네임스페이스에서 인터넷 ping

여기에 이미지 설명을 입력하세요.

  • 네임스페이스에 nat 규칙을 추가한 후 호스트에서 인터넷을 ping합니다.

여기에 이미지 설명을 입력하세요.

이유를 아는 사람이 있나요?

도움을 주셔서 미리 감사드립니다.

답변1

대답은 아니지만 문제의 범위를 좁히려는 시도는 다음과 같습니다.

유사하고 약간 단순화된 설정을 복사했는데 변장이 훌륭하게 작동했습니다. 다음과 같습니다.

+-----------+                             +----------+
|        o--|--o                  o--ptya |  ptyb--o |
|   veth0b  |  veth0a          ppp0       |     ppp0 |
| 10.0.0.1  |  10.0.0.254  10.0.3.1       | 10.0.3.2 |
|           |                             |          |
|   ns0     |                             |   ns1    |
+-----------+                             +----------+

여기서 ppp 연결은 다음을 통해 설정됩니다(물론 네임스페이스 ns1의 두 번째 pppd):

socat PTY,link=/tmp/ptya PTY,link=/tmp/ptyb
sudo pppd `readlink /tmp/ptya` noauth nocrtscts xonxoff local maxfail 0 10.0.3.1:10.0.3.2 persist
sudo pppd `readlink /tmp/ptyb` noauth nocrtscts xonxoff local maxfail 0 10.0.3.2:10.0.3.1 persist

위장:

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

ns0부터 시작하여 기본 네임스페이스에 다음 ping 10.0.3.2과 같이 나타납니다.tcpdump -i ppp0

IP 10.0.3.1 > 10.0.3.2: ICMP echo request, id 23836, seq 1, length 64
IP 10.0.3.2 > 10.0.3.1: ICMP echo reply, id 23836, seq 1, length 64

따라서 위장은 분명히 작동하고 있으며 ppp 인터페이스는 어떻게든 작동하지 않습니다.

다음으로 시도할 사항은 다음과 같습니다.

  • 서버의 socat/ppp 설정을 복사하고 작동하는지 또는 작동을 방해하는 다른 것이 있는지 확인하십시오.

  • 처음에는 userspace에 PPPoE 연결을 설정하려고 시도했지만 pppoe이는 매우 복잡하고 pppd에서 지속적인 충돌이 발생했으며 pppoe-server아직 이유를 파악하지 못했습니다. 따라서 PPPoE 구성을 유사한 설정으로 줄일 수 있다면(그리고 무엇을 했는지 말해 줄 수도 있음) 사람들은 PPPoE가 어떻게든 문제를 일으키고 있는지 알아낼 수 있습니다.

  • 이것을 시도하는 동안 주의하지 않으면 스크립트가 뒤에서 많은 작업(기본 경로, IP 주소 할당, iptables 항목 등)을 수행한다는 것을 알았습니다. 따라서 설정에 흥미로운 iptables 규칙, 경로 또는 기타 항목을 설정하지 않더라도 다시 확인하겠습니다.

관련 정보