使用iptables将ipv6转发到ipv4?


16

目前,我有一个安装程序,由于配置需要永久修复,因此我有一台只能由ipv4访问的服务器。但是,我还有一个可以通过ipv6访问的服务器。我想知道是否可以使用iptables将某个端口上的ipv6通信从其中一台服务器转发到另一台使用ipv4通信的服务器。


2
您正在寻找的是NAT64,我认为iptables不会(现在)。
克里斯·S

克里斯说得对-NAT64 RFC刚刚发布,我会花点时间,直到有任何真正的支持。也就是说,您也许可以通过其他方式实现目标,但是我们没有足够的细节可以肯定。例如,如果是HTTP服务器,则可以在协议之间反向代理请求。
Shane Madden

Answers:


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仍未准备就绪。

但是,您可以尝试6tunnel,如困惑所示。

幸运的是,它存在于Debian和Ubuntu存储库中,因此您可以使用轻松地安装它sudo apt-get install 6tunnel。如果您使用的是其他系统,则必须从source构建它。

从源代码构建实际上并不难,只需运行一些命令(以root用户身份)即可:

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)。
  • 原来的端口是即您绑定的端口。
  • 目标主机是将流量转发到的目标主机。它可以在任何地方:本地主机,或网络或Internet上的其他地方。
  • 目的端口是目标主机将收到您的转发流量的端口。

例如,如果您想允许侦听端口1337的纯IPv4服务器通过IPv6进行访问,请使用:

6tunnel -6 1337 localhost 1337

上面的命令将侦听IPv6上的端口1337,并将流量通过IPv4转发到同一台计算机上的端口1337。然后它将在后台运行,因此您不必担心它。

实际上,您应该设置一个cron作业以确保它仍在运行。为您提供方便6tunnel的示例!在启动时运行它也不是一个坏主意。

有关更多文档,请运行6tunnel -hman 6tunnel


将其发布为新答案,因为通过困惑编辑当前答案会改变太多方式,并且可能会被拒绝作为建议的编辑!
Lao Lam 2014年

5

的最新版本xinetd还可以侦听IPv6,然后将连接转发到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

我想对利奥·兰姆斯的回答和投票发表评论,但是我没有足够的声誉。首先:非常感谢您。

对于使用此线程的任何人:我的ISP使用Dual Stack Lite将我的连接从IPv4更改为IPv6,这意味着我不再拥有自己的IPv4地址。这是一个问题,因为我想从任何不支持IPv6的地方访问我的IP摄像机。为了解决这个问题,我尝试了以下操作:

  1. 为路由器中的端口99启用IPv6转发到我的Ubuntu计算机。
  2. Ubuntu机器(家庭网络): 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从任何地方访问摄像机。我计划要么获得可以完成这项工作的覆盆子,要么获得香蕉pi m3来完成其他任务。


1
现在,您知道需要另一个IP摄像机时该怎么办。是2015年;购买不支持IPv6的设备完全是浪费钱。
迈克尔·汉普顿

它不像相机是几岁了:p
Crumar 2015年

2

为人们找到该页面带来的好处多于必需的OP(我来这里寻找的是IPv4(Twisted)应用程序的IPv6连接解决方​​案),一种可能性是应用程序6tunnel,侦听IPv6并将请求转发到另一个接口,港口。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.