iptables를 사용하여 ipv6을 ipv4로 전달 하시겠습니까?


15

현재 영구적으로 수정해야 할 구성으로 인해 ipv4에서만 액세스 할 수있는 서버가있는 설정이 있습니다. 그러나 ipv6으로 액세스 할 수있는 서버도 있습니다. iptables를 사용하여 ipv4 트래픽을 사용하여 서버 중 하나에서 다른 서버로 특정 포트의 ipv6 트래픽을 전달할 수 있는지 궁금합니다.


2
당신이 찾고있는 것은 NAT64라고 불리는데 iptables는 (아직도) 그렇게 생각하지 않습니다.
Chris S

Chris가 바로 나왔습니다. NAT64 RFC가 방금 게시되었습니다. 실제로 지원할 때까지 잠시 기다렸습니다. 즉, 다른 방법으로 목표를 달성 할 수도 있지만 확실하게 알 수있는 정보가 충분하지 않습니다. 예를 들어 HTTP 서버 인 경우 프로토콜 간 요청을 리버스 프록시 할 수 있습니다.
Shane Madden

답변:


16

IPtables는 현재이 작업을 수행 할 수 없으므로 연결을 프록시하려면 사용자 공간 프로세스가 필요합니다. socat 은 이에 적합한 도구입니다.

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234

1
감사합니다. 도움이되었습니다. 누구든지 UDP 솔루션을 찾고있는 경우 : socat UDP6-RECVFROM : 64444, fork UDP4-SENDTO : localhost : 64443 나를 위해 일했습니다
Alexander

10

귀하의 질문대한 의견에서 언급했듯이 NAT64는 3 년이 지난 후에도 아직 준비가되지 않았습니다.

그러나 6tunnel퍼즐이 제안한대로 시도해 볼 수 있습니다.

운 좋게도 데비안과 우분투 저장소에 있기 때문에을 사용하여 매우 쉽게 설치할 수 있습니다 sudo apt-get install 6tunnel. 다른 시스템을 사용하는 경우 source 에서 시스템을 빌드해야 합니다 .

소스에서 빌드하는 것은 실제로 어렵지 않으며 루트로 일부 명령을 실행하는 문제입니다.

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

단순화 된 구문은 다음과 같습니다.

6tunnel [-4|-6] [-l local-host] original-port destination-host destination-port
  • [-4|-6]선택 사항이며 당신은 IPv4 또는 IPv6 (각각)에 (듣기) 바인딩 할 수 있습니다 여부를 지정할 수 있습니다.
  • -l또한 선택 사항입니다. 바인딩 할 주소 (IPv4 또는 IPv6)를 선택할 수 있습니다.
  • 원래 포트는 당신이 결합거야하는 포트입니다.
  • 대상 호스트는 당신이에 트래픽을 전달 볼 수있는 곳입니다. 로컬 호스트 또는 네트워크 또는 인터넷의 다른 곳에있을 수 있습니다.
  • 대상 포트는 사용자의 전송 트래픽을 수신 할 대상 호스트의 포트입니다.

예를 들어, 포트 1337에서 수신 대기하는 IPv4 전용 서버가 IPv6을 통해 액세스되도록하려면 다음을 사용하십시오.

6tunnel -6 1337 localhost 1337

위의 명령은 IPv6의 포트 1337을 수신하고 IPv4를 통해 동일한 시스템의 포트 1337로 트래픽을 전달합니다. 그런 다음 백그라운드에서 실행되므로 걱정할 필요가 없습니다.

실제로 cron 작업을 설정하여 여전히 실행 중인지 확인해야합니다. 편의 6tunnel 위한 제공 합니다! 부팅시 실행하는 것도 나쁜 생각이 아닙니다.

자세한 설명서를 보려면 6tunnel -h또는을 실행하십시오 man 6tunnel.


퍼즐에 의해 현재 답변을 편집하면 너무 많이 변경되어 제안 된 편집으로 거부 될 수 있기 때문에 새로운 답변으로 게시하십시오!
Léo Lam

5

최신 버전은 xinetdIPv6에서 수신 한 다음 IPv4 주소로 연결을 전달할 수도 있습니다.

포트 3389에서 IPv6 연결을 수신하고 내부 IPv4 주소의 포트 3389로 전달하는 샘플 구성 :

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

xinetd기본 시스템과 함께 설치되거나 승인 된 공급 업체 리포지토리에서 사용할 수 있으므로보다 제한된 환경에서 유용 할 수 있습니다 .


3

Leo Lams의 답변과 찬성에 대해 댓글을 달고 싶지만 평판이 충분하지 않습니다. 우선 : 레오 람에게 대단히 감사합니다!

이 스레드를 따르는 사람 : ISP가 Dual Stack Lite를 사용하여 IPv4에서 IPv6으로 연결을 변경했습니다. 즉, 더 이상 내 고유 한 IPv4 주소가 없습니다. IPv6를 지원하지 않는 anyhwere에서 내 IP 카메라에 액세스하려고 할 때 문제가되었습니다. 이 문제를 해결하기 위해 다음을 시도했습니다.

  1. 라우터의 포트 99에 IPv6 전달을 사용하여 Ubuntu 시스템으로.
  2. 우분투 머신 (홈 네트워크) : sudo 6tunnel -6 99 192.168.178.35 80
  3. 고정 IPv4 및 IPv6 주소를 사용하는 vServer Debian : sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian : iptables의 포트 99에서 들어오는 TCP 연결 허용

ipv6 접두사는 라우터에 표시되었으며 인터페이스 ID는 IPv6 전달 프로세스에서 매핑되었습니다.

이제 vServer 도메인 example.com:99를 사용하여 어디서나 카메라에 액세스 할 수 있습니다. 나는이 작업을 수행 할 라즈베리를 얻거나 다른 작업을 위해 바나나 파이 m3을 계획하고 있습니다.


1
이제 다른 IP 카메라가 필요할 때 무엇을해야하는지 알게되었습니다. 2015 년입니다. IPv6를 지원하지 않는 것을 구입하는 것은 완전한 돈 낭비입니다.
Michael Hampton

카메라가 몇 살이 된
것과는 다릅니다

2

사람들이 반드시 OP 보다이 페이지를 찾는 사람들의 이익을 위해 (필자는 여기에서 IPv4 (Twisted) 응용 프로그램의 IPv6 연결에 대한 솔루션을 찾고있었습니다) 응용 프로그램 6tunnel은 IPv6에서 수신 대기하고 다른 인터페이스로 요청을 전달합니다. 포트.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.