我想让用户轻松将NAT上的端口转发到我的C++应用程序的本地机器上.我想在OSX和Windows上做这个工作.Linux将是一个很好的奖励,但Linux用户可能更容易手动转发端口,所以它不是一个问题.LGPL类型代码没问题,但我不能使用任何直接GPL.
我很想听听任何人在这个领域有过的想法或经历,但我想到了一些具体的问题:
我正在寻找.Net中点对点NAT遍历的建议或解决方案.假设我有一个聊天应用程序,两个客户端需要连接,但两者都在NAT后面:
对于家庭场景,uPNP可能没问题,因为只涉及电缆调制解调器或消费者路由器.但是,uPNP无法实现的企业环境呢?
我熟悉UDP穿孔,可以握手,但我宁愿不依赖它来传输真实的应用数据.
我也研究过IPv6和Teredo,但我不确定每个客户端都有IPv6可用性,并且对于所有Teredo要求(服务器,中继等)都有点混乱.
这是2011年和IM /聊天客户已经存在了十年,然后一些 - 所以我相信这个问题已经解决了很多次.任何人都可以推荐这方面的最佳实践吗?提前致谢!
我有一个4 linux(CentOS)机器的实验设置:

所有4台机器都使用不同的网络进行内部连接,并且可以ping其他直接连接的接口.但是只有PC4才能访问互联网.
我正在尝试设置iptable规则,允许PC1能够通过PC4访问互联网,但我不知道如何做到这一点.
我试图在PC2,PC3和PC4的出接口添加NAT:
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,你能不能给我一些想法如何在这样的设置中我可以使PC1访问10.0.0.1网络?
我正在通过ICE/STUN规范并提出了一个问题.如果我位于NAT后面,可能是Full Cone,Restricted或Port Restricted但不是对称NAT,并且考虑到我正在使用UDP,那么在这种情况下,我的SERVER REFLEXIVE和PEER REFLEXIVE地址/候选将是相同的,对吧?我无法想象在什么情况下(对于上面提到的NAT类型)它们会彼此不同?或者如果它们真的不同,那么它只能意味着我的NAT是对称的?
如果你在Docker容器中运行某些东西(例如nginx)并将一个暴露的端口发布到外部世界(比如docker run -p 80:80 nginx),那么Docker将会
我不想让任何人连接到已发布的端口,但Docker将其搞砸了.所以我重新启动了Docker守护进程--iptables=false,允许我自己管理防火墙.但是,nginx现在只将桥(172.18.0.1)视为源地址.
如何控制防火墙并仍然将源IP地址转发到容器?
因此,AWS中私有子网的目的是使其实例无法直接从外部访问.然而,有些情况(成功抵制'实例'双关语),其中实例可以访问互联网.一个这样的用例可以是例如下载软件更新.
实现这一目标的"标准"方法是使用NAT网关和路由表中的规则,将所有出站流量指向它(0.0.0.0/0 - > nat-gw).
令我困惑的是:我们不能只使用具有正确配置的安全组(SG)的公有子网来拒绝入站流量并允许特定的出站流量吗?由于SG是有状态的,它们应该允许对出站流量的响应通过,就像NAT网关一样.
我假设我只是遗漏了一些东西,或者上面的配置在某些方面受到限制,我只是没有看到.但是我无法找到答案.
我正在编写一个 P2P 应用程序,希望避免用户手动设置端口转发。
我有点困惑,因为似乎有两种不同的协议来配置 NAT,UPnP/IGD 和 NAT-PMP。我应该使用哪一个?所有 NAT 都支持它们吗?或者我应该同时支持两者以确保 NAT 至少支持其中之一?
我必须在位于 NAT 后面(在不同网络中)的两个对等点之间在 iOS (Objective-C) 中实现套接字通信。是否有任何技术可以让我实现这一目标?基本上,我正在寻找一些 STUN、TURN 实现,它可以让我找出外部 IP/端口地址。
提前致谢,列昂尼德
所以,我一直在阅读 NAT-Punchthrough。我似乎明白了这个想法,但我很难实现它,而且我觉得我在这里错过了一步。测试此功能有点困难,因为当涉及到基于 Internet 的连接时,我几乎无法控制环境。
我有一个 SQL 服务器作为我的“协助者”运行,它保留服务器和客户端的外部地址,以及外部看到的端口。
以下是到目前为止的步骤: - 我通过存储服务器/客户端 IP/PORT 的 Web 请求(PHP 脚本)连接到我的 SQL 服务器 - 当两者都已知时,客户端和服务器都尝试连接(服务器主机在设置的端口上,客户端通过设置的端口连接) - 没有任何重大的事情发生
这里有 2 个未知数,我想和你核对一个。NAT-Punchthrough 是否真的要求我使用我计划在之后的步骤中连接的确切(内部/LAN)端口执行第一步?
如果是这样,我不知道我的服务器在水下究竟是如何工作的,所以它可能需要比我最初给定的静态端口更多的端口来连接,但这至少给了我一个提示。
如果有人对此有更多文档,请告诉我。
来源:
P2P 应用程序编程
http://www.mindcontrol.org/~hplus/nat-punch.html
我试图设置这台机器:https://github.com/ByteInternet/hypernode-vagrant
当我这样做时,vagrant up我得到以下错误:Timed out while waiting for the machine to boot.
完整的错误上下文:
$ vagrant up
Bringing machine 'hypernode' up with 'virtualbox' provider...
==> hypernode: Will use PHP 7. If you want PHP 5.5 instead change the php version in local.yml.
==> hypernode: Checking if box 'hypernode_php7' is up to date...
==> hypernode: Clearing any previously set forwarded ports...
==> hypernode: Clearing any previously set network interfaces...
==> hypernode: Preparing network interfaces based on configuration... …Run Code Online (Sandbox Code Playgroud)