我正在编写一个 P2P 应用程序,希望避免用户手动设置端口转发。
我有点困惑,因为似乎有两种不同的协议来配置 NAT,UPnP/IGD 和 NAT-PMP。我应该使用哪一个?所有 NAT 都支持它们吗?或者我应该同时支持两者以确保 NAT 至少支持其中之一?
所以,我一直在阅读 NAT-Punchthrough。我似乎明白了这个想法,但我很难实现它,而且我觉得我在这里错过了一步。测试此功能有点困难,因为当涉及到基于 Internet 的连接时,我几乎无法控制环境。
我有一个 SQL 服务器作为我的“协助者”运行,它保留服务器和客户端的外部地址,以及外部看到的端口。
以下是到目前为止的步骤: - 我通过存储服务器/客户端 IP/PORT 的 Web 请求(PHP 脚本)连接到我的 SQL 服务器 - 当两者都已知时,客户端和服务器都尝试连接(服务器主机在设置的端口上,客户端通过设置的端口连接) - 没有任何重大的事情发生
这里有 2 个未知数,我想和你核对一个。NAT-Punchthrough 是否真的要求我使用我计划在之后的步骤中连接的确切(内部/LAN)端口执行第一步?
如果是这样,我不知道我的服务器在水下究竟是如何工作的,所以它可能需要比我最初给定的静态端口更多的端口来连接,但这至少给了我一个提示。
如果有人对此有更多文档,请告诉我。
来源:
P2P 应用程序编程
http://www.mindcontrol.org/~hplus/nat-punch.html
所以我有一个在 Google Cloud 中运行的 kubernetes 集群。我需要从集群内的 Pod 访问配置了 IP 白名单的外部数据库。我似乎需要一个静态的共享 IP 来用于集群的传出流量,最好的方法是什么?
设置服务 IP 似乎无关紧要,因为这与入站流量无关。我研究了Cloud NAT,它看起来很有前途,但我不太确定如何设置它。任何文档/教程都会有帮助,谢谢!
我想连接到计算机,每个计算机都在NAT路由器后面.我读到STUN只适用于NAT路由器后面的一台计算机.真的吗?如果是这样,我该如何解决双NAT问题?
谢谢,托马斯
这个问题之所以存在是因为它具有历史意义,但它不被认为是本网站的一个好的,主题上的问题,所以请不要将它作为证据,你可以在这里提出类似的问题.
我有一个奇怪的TCP问题根本没有意义.我正在撕扯我的头发.
从Amazon S3下载文件(并且只有Amazon S3-其他所有站点都能正常工作)连接中断的时间有一定百分比.这只发生在西雅图的服务器上,NAT路由器后面有一个Web服务器.直接从路由器连接工作正常.从我们在维多利亚州的服务器一切正常,我们根本无法复制这一点.
我试过的事情:
在失败的情况下,亚马逊(或沿途的东西)向我们发送一个868长度的数据包而不是预期的1500字节数据包.服务器看到数据包后回复RST数据包(发生错误)并断开连接.
任何帮助将不胜感激!
以下是两个TCP转储 -
------------ Begin Error Case TCP Dump -------------
tcpdump -r /tmp/s3doesntwork-died
reading from file /tmp/s3doesntwork-died, link-type EN10MB (Ethernet)
19:58:42.542189 IP locum.sparklit.com.39491 > 189-81.amazon.com.www: S 193799772:193799772(0) win 5840 <mss 1460,sackOK,timestamp …Run Code Online (Sandbox Code Playgroud) 我尝试在谷歌和这里搜索,但我仍然无法找到简单的C\C++示例udp打孔算法.如果你知道我在哪里找到它,请帮忙.谢谢!
我正在尝试访问通过IP NAT映射公开的SQL Server.所有端口都是开放的.我不知道NAT的细节,如果它是相关的,因为那是隐藏在一堆繁文缛节中的公司其他地方.
这是我想出来的.当您尝试访问SQL Server的命名实例时,客户端会询问运行命名实例的端口.如果我进入SQL Server,我可以netstat用来查找该实例的端口,并可以通过防火墙成功连接.但是,通过实例名称连接不起作用.我的猜测是,服务器在某个时刻使用它的内部IP地址进行响应,而客户端正在使用它.
有谁知道这是否属实,是否有办法绕过它?
我正在尝试找到一些代码示例,以使用JavaScript查询STUN服务器以获取我的公共IP和端口。也许在使用服务器
虽然http://www.ietf.org/rfc/rfc3489.txt此处解释了STUN规范(这是一个很长的文档,显然我不希望您阅读它),但我找不到任何代码示例根本可以让我的生活更轻松。就像是
function getMyIPAndPort() {
//query stun server for it
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在设置两个泊坞容器
container1 container2
| | |
eth0 eth1 |
| | eth1
docker0 docker1<----------------
|
|
internet
Run Code Online (Sandbox Code Playgroud)
docker0和docker1是桥梁.
我在主机和容器中都有ip转发为1.我有设置
iptables -I POSTROUTING -t nat -o eth0 -j MASQUERADE in container 1
Run Code Online (Sandbox Code Playgroud)
仍然我无法ping从容器2到互联网的任何东西.我可以看到正在容器1的eth1接收数据包.
OS: ubuntu 13.10
docker version: 0.11.1, build fb99f99
Run Code Online (Sandbox Code Playgroud)
我错过了一些配置吗?
重现步骤:
SERV=$(docker run --privileged=true -i -d -t -v ~/Projects/code/myproject/build:/build:ro debian:7.4 /bin/bash)
CLI=$(docker run --privileged=true -i -d -t -v ~/Projects/code/myproject/build:/build:ro debian:7.4 /bin/bash)
sudo pipework br1 $SERV 10.1.0.1/8
sudo pipework br1 $CLI 10.1.0.3/8
Run Code Online (Sandbox Code Playgroud)
在$ SERV:iptables -I POSTROUTING -t nat -o eth0 …
我想通过mosh连接到位于NAT后面的服务器。我无法触摸路由器将其设置为upnp支持,但是我已经申请了UDP端口转发9807-> 60000,以及ssh端口转发原因。
因此,是否有通过客户端和/或服务器端的命令行args或conf文件指定服务器端口的方法?
注意:以下不起作用!!
mosh -p 9807 user@my_server
Run Code Online (Sandbox Code Playgroud)
编辑:
我尝试先SSH到服务器,然后手动运行mosh-server -p 60000,然后从另一个终端运行mosh -p 9807 my_server。这会导致错误:
Error binding to IP my_server_ip: bind: Address already in use
Run Code Online (Sandbox Code Playgroud)
说:
谢谢。
nat ×10
p2p ×2
udp ×2
amazon-s3 ×1
c++ ×1
containers ×1
docker ×1
html ×1
html5 ×1
iptables ×1
java ×1
javascript ×1
kubernetes ×1
mosh ×1
networking ×1
port ×1
sql-server ×1
stun ×1
tcp ×1
traversal ×1
upnp ×1