这是 nat-traverse 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器
程序:
您的姓名
nat-traverse - 使用 UDP 来遍历 NAT 网关
概要
要创建一个简单的纯文本隧道,请使用命令
用户@left $ nat-traverse 40000:natgw-of-right:40001
用户@right $ nat-traverse 40001:natgw-of-left:40000
其中 40000 是“左侧”未使用的 UDP 端口,40001 是“右侧”未使用的端口。 看
“示例”了解更多。
VERSION
本文档描述了 nat-traverse v0.5。
商品描述
nat-traverse 在 NAT 网关后面的节点之间建立连接,即
做的主机 而不去 有公共 IP 地址。 此外,您可以通过以下方式设置小型 VPN
在 nat-traverse 之上使用 pppd(参见“示例”)。 nat-traverse 做 而不去 需要一个
Internet 上的外部服务器,无需重新配置所涉及的 NAT
网关,要么。 nat遍历 运作方式 外的开箱。
有关如何实现这一点,请参阅“技术”。
限制:nat-traverse 不适用于更改端口号的网关。 这个
是 nat-traverse 设计的一个基本问题,因为更改的端口号是(在
一般)不可预测。
配置
"local_port:peer:remote_port" (必填)
设置要使用的本地端口和要连接的远程地址。
请注意,您必须提供 IP 地址或主机名 NAT 网关 主人的
您想连接,因为目标主机没有公共 IP 地址。
"--cmd="pppd...""
建立连接后运行指定的命令。
该命令将在其 STDIN 和 STDOUT 绑定到套接字的情况下运行,即
命令写入 STDOUT 的所有内容都将转发到对等方。
如果没有指定命令,nat-traverse 会将输入从 STDIN 中继到对端
反之亦然,即 nat-traverse 降级为 netcat。
“--窗口=10“
设置要发送的初始垃圾数据包的数量。 默认值 10 应该与
大多数防火墙。
“--超时=10“
设置等待对等方确认的最大秒数。
“--退出后连接”
隧道建立成功后退出nat-traverse。
nat-traverse 返回一个非 0 状态码,表明它无法建立
隧道。
如果您希望另一个程序使用隧道,“--quit-after-connect”很有用。 为了
例如,您可以将 OpenVPN 配置为使用与 nat-traverse 相同的端口——因此
OpenVPN 将能够跨越 NAT 网关。
“--版本”,“--帮助”
技术
nat-traverse 在 NAT 网关后面的主机之间建立连接,而不需要
重新配置所涉及的 NAT 网关。
1.首先,主机“left”上的nat-traverse向主机的NAT网关发送垃圾UDP包
“对”。 当然,这些数据包会被防火墙丢弃。
2. 然后“right”的nat-traverse向“left”的NAT网关发送垃圾UDP包。
这些数据包是 而不去 丢弃,因为“左”的 NAT 网关认为这些数据包是
回复步骤 1 中发送的数据包!
3.“左”的nat-traverse继续向“右”的NAT网关发送垃圾包。
这些数据包现在也不会被丢弃,因为 NAT 网关认为这些数据包是
对步骤 2 中发送的数据包进行回复。
4. 最后,两台主机都发送一个确认包来表示准备就绪。 当这些
接收到数据包,建立连接,nat-traverse 可以中继
STDIN/STDOUT 到套接字或执行程序。
示例
设置 of a 小 VPN - PPP
使用点对点协议可以轻松设置 VPN(虚拟专用网络)
守护进程,“pppd”:
root@left # nat 遍历 \
--cmd="pppd updetach noauth 被动 notty \
ipparam vpn 10.0.0.1:10.0.0.2"
40000:natgw-右:40001
root@right # nat 遍历 \
--cmd="pppd nodetach notty noauth"
40001:左natgw:40000
“pppd”创建一个新接口,通常是“ppp0”。 使用该接口可以ping通
10.0.0.1 或 10.0.0.2。 如您所见,“pppd”升级了仅数据隧道 nat-traverse
提供完整的 IP 隧道。 这样你就可以建立可靠的 TCP 连接
隧道,即使隧道使用 UDP! 此外,您甚至可以添加 IPv6 地址
通过运行“ip -0 addr add...”到“ppp6”!
请注意,虽然这个 VPN is 可以说是一个专用网络,它是 而不去 以任何方式担保
道路。 您可能希望使用 SSH 来加密连接。
港口 转发 - netcat的
您可以使用“netcat”将本地 UDP 或 TCP 端口之一转发到任意 UDP 或
远程主机的 TCP 端口,类似于“ssh -L”或“ssh -R”:
用户@left $ nat-traverse 10001:natgw-of-right:10002 \
--cmd="nc -vl 20000"
用户@right $ nat-traverse 10002:natgw-of-left:10001 \
--cmd="nc -v 本地主机 22"
一旦隧道建立(使用 UDP 端口 10001 和 10002),“left”的 TCP 端口
20000 被转发到“right”的 SSH 守护进程(TCP 端口 22):
user@some-other-host $ ssh -p 20000 user@left
# 将连接到右侧的 SSH 守护进程!
但请注意,在这个例子中你失去了 TCP 的可靠性,因为实际数据是
通过UDP传输; 所以这只是一个玩具示例。 如果您想要可靠的流,请使用 PPP
在 nat-traverse 之上,如上所述。
设置 of a VPN - OpenVPN的
您可以使用如果你想拥有一个 安全 VPN。
通过 nat-traverse 使用 OpenVPN 只需要对 OpenVPN 的配置文件进行一项更改,
假设您不想使用 OpenVPN 的多客户端模式:您必须调整
相应的“code”和“lport”选项,例如:
# 添加到左侧和右侧 OpenVPN 配置的选项:
60001端口
端口号 60001
# 在左侧执行的命令。 对:
root@left # 直到 \
nat-traverse --连接后退出 60001:right:60001 \
做 \
睡5\
完毕; \
打开VPN [...]
root@right # 直到 \
nat-traverse --连接后退出 60001:左:60001 \
做 \
睡5\
完毕; \
openvpn [...]
“直到”循环确保在 nat-traverse 能够启动之前不会启动 OpenVPN
建立连接。 Michael Kugele(“michael (at) kugele.net”)也报道了一个方法
仍然能够通过 nat-traverse 使用 OpenVPN 的多客户端模式:作为所有实例
nat-traverse 必须使用唯一的端口(因为连接由
源/目标端口组合),您必须使用重定向规则来重定向
nat-traverse 使用的端口到 OpenVPN 守护程序侦听的端口:
iptables -t nat -A PREROUTING -p udp \
--dport $LPORT -j DNAT --to $HOST:$PORT
iptables -t nat -A PREROUTING -p udp \
--dport $PORT -j 重定向 --to-port $LPORT
$LPORT 指定 nat-traverse 在服务器端使用的源端口,“$HOST:$PORT”
是 OpenVPN 服务器的地址。)
限制
仅支持 IPv4,nat-traverse 不适用于 IPv6 地址。 如果你给我留言
确实需要 IPv6 支持。
nat-traverse 不适用于更改端口号的网关。 这是一个
nat-traverse 设计的基本问题,因为更改的端口号是(通常)
不可预测。
使用 onworks.net 服务在线使用 nat-traverse