Linux tun 인터페이스 패킷 라우팅

Linux tun 인터페이스 패킷 라우팅

다음 시나리오의 IP 패킷 흐름에 대해 질문이 있습니다.

시나리오는 다음과 같습니다.

  1. 클라이언트 측의 tun0(10.0.0.2/8) 인터페이스와 물리적 무선 LAN 카드 wlan0(IP 주소가 수정되지 않음), wlan0은 인터넷에 연결할 수 있습니다.
  2. 서버 측(Ubuntu 12.04 amd64)의 또 다른 tun0(10.0.0.1/8) 인터페이스와 물리적 이더넷 카드 eth0(192.168.1.38/24), eth0은 NAT 방화벽 뒤의 개인 네트워크에 있으며 다음을 통해 인터넷에 연결할 수 있습니다. 방화벽(게이트웨이로서의 방화벽),
  3. echo 1 > /proc/sys/net/ipv4/ip_forward서버측에서 " "을(를) 실행했습니다 .
  4. iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE서버측에서 " "을(를) 실행했습니다 .

시나리오 다이어그램은 다음과 같습니다.

---------------          ----------------
|             |          |              |
| client tun0 |----------| client wlan0 |
|  10.0.0.2   |          |  ip not fix  |
|             |          |              |
---------------          ----------------
                                |
                                |

                             internet

                                |
                                |
                         ----------------
                         |              |
                         |   firewall   |
                         |   (gateway)  |
                         | 192.168.1.1  |
                         |              |
                         ----------------
                                |
                                | private network
                                | 192.168.1.0/24
                                |
---------------          ----------------
|             |          |              |
| server tun0 |----------| server eth0  |
|  10.0.0.2   |          | 192.168.1.38 |
|             |          |              |
---------------          ----------------

나는 두 개의 매우 간단한 VPN과 유사한 클라이언트/서버 프로그램을 사용하여 두 개의 tun0 인터페이스의 IP 패킷을 읽고 쓰고 wlan0과 eth0 사이에 터널을 생성하여 10.0.0.2의 IP 패킷이 10.0.0.1에 도달할 수 있도록 하고 그 반대의 경우도 마찬가지입니다( 예를 들어 10.0.0.1에서 10.0.0.2까지 ftp를 실행할 수 있습니다.

그러나 클라이언트 tun0(10.0.0.2)을 사용하여 웹페이지를 탐색하려는 경우 http 요청은 10.0.0.2에서 시작되어 인터넷 IP 주소(확실히 10.0.0.1은 아님)로 향하게 됩니다. (제 생각에는) 서버 tun0(10.0.0.1)에 도달한 후 http 요청은 서버 eth0으로 전달됩니다(ip_forward가 켜져 있고 전달된 이 http 요청의 소스 IP 주소는 여전히 10.0.0.2일 것 같습니다. 내가 틀렸다면 수정하세요.) 거기서 NAT가 발생하여 eth0에서 오는 것처럼 http 요청을 다시 패키지합니다(즉, iptables 명령을 실행하면 소스 IP 주소가 192.168.1.38로 변경됨). 그런 다음 다시 패키지된 http 요청이 방화벽을 통과합니다. (그리고 인터넷을 통해) 목적지로 이동합니다.

웹사이트의 http 응답이 서버 eth0에 도달하면 그곳에서 역방향 NAT가 발생해야 합니다. 내 질문은 다음과 같습니다

  1. 역방향 NAT가 http 응답의 대상 IP 주소를 10.0.0.2로 되돌리나요?
  2. 서버 eth0은 역 NATed http 응답을 어디로 전달할지 어떻게 알 수 있습니까?
  3. 응답의 대상 IP 주소가 역 NAT화되어 10.0.0.2가 되므로 eth0은 http 응답을 서버 tun0(10.0.0.1)으로 전달합니까?
  4. 역방향 NAT http 응답의 적절한 라우팅/전달을 위해 서버 측에 경로를 추가해야 합니까? 그렇다면 어떻게?
  5. 역방향 NAT http 응답의 적절한 라우팅/전달을 위해 서버 측에 일부 iptables 규칙을 추가해야 합니까? 그렇다면 어떻게?

답변1

클라이언트가 tun0을 통해 모든 트래픽을 보낸다고 가정하면 서버 측에서 다음을 추가해야 합니다(/proc/sys/net/ipv4/ip_forward를 활성화한 후).

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

이 단계 후에 클라이언트에서 웹페이지를 탐색할 때 패킷 흐름은 다음과 같습니다.

  1. 클라이언트는 10.0.0.1로 패킷을 보냅니다.
  2. 서버 측에서는 tun0에서 수신된 패킷이 10.0.0.2에서 192.168.1.38로 변환됩니다.
  3. NAT 테이블에 매핑 항목이 생성됩니다.
  4. 패킷은 192.168.1.1(게이트웨이)을 통해 인터넷으로 전송됩니다.
  5. 응답은 192.168.1.38로 수신됩니다.
  6. 3단계에서 생성한 매핑 항목에 따라 역방향 NAT가 발생합니다.
  7. 응답 패킷은 10.0.0.2로 다시 라우팅됩니다.

나는 몇 가지 중요한 단계를 놓치지 않기를 바랍니다 :)

관련 정보