标签: nat

.Net WCF NAT遍历的最佳实践

我正在寻找.Net中点对点NAT遍历的建议或解决方案.假设我有一个聊天应用程序,两个客户端需要连接,但两者都在NAT后面:

对于家庭场景,uPNP可能没问题,因为只涉及电缆调制解调器或消费者路由器.但是,uPNP无法实现的企业环境呢?

我熟悉UDP穿孔,可以握手,但我宁愿不依赖它来传输真实的应用数据.

我也研究过IPv6和Teredo,但我不确定每个客户端都有IPv6可用性,并且对于所有Teredo要求(服务器,中继等)都有点混乱.

这是2011年和IM /聊天客户已经存在了十年,然后一些 - 所以我相信这个问题已经解决了很多次.任何人都可以推荐这方面的最佳实践吗?提前致谢!

.net wcf p2p nat nat-traversal

7
推荐指数
1
解决办法
1341
查看次数

与路由器后面的计算机进行简单的TCP通信

我正在为我的媒体播放器编写C#遥控器.它在我的Android手机上运行.

我有一个客户端应用程序在我的计算机上侦听TCP连接,其中一个已建立连接,处理命令(音量增大,音量减小,......).我已经telnet 127.0.0.1在我的计算机上测试了那部分,它的效果非常好.

从手机连接起来比较困难,因为它不在同一个网络上(我没有Wi-Fi,只有有线连接),所以我不知道如何继续.基本上我想连接到路由器后面的计算机.

我是否应该在手机上托管TCP服务器,并让PC连接到它?以IRC为例:虽然我在路由器后面,但我可以连接到外部服务器,无需端口转发.或者,如果在我的计算机上托管服务器很好,我该如何连接它?

我还不明白这一切,如果我出错了,请随时纠正我.

sockets tcp nat

7
推荐指数
2
解决办法
9245
查看次数

SERVER REFLEXIVE和PEER REFLEXIVE地址/候选人在什么情况下彼此不同?

我正在通过ICE/STUN规范并提出了一个问题.如果我位于NAT后面,可能是Full Cone,Restricted或Port Restricted但不是对称NAT,并且考虑到我正在使用UDP,那么在这种情况下,我的SERVER REFLEXIVE和PEER REFLEXIVE地址/候选将是相同的,对吧?我无法想象在什么情况下(对于上面提到的NAT类型)它们会彼此不同?或者如果它们真的不同,那么它只能意味着我的NAT是对称的?

nat stun

7
推荐指数
1
解决办法
5436
查看次数

如何在我的 Raspberry Pi 上使用 STUN/ICE 实现 NAT 穿越

我正在尝试在我的树莓派上设置一个能够突破 NAT 路由器后面的实现,这样我就可以远程连接到它,无论它位于哪个网络后面。

我已经尝试过 pagekite.me,它作为中继/反向隧道解决方案非常棒,但我觉得它仍然有点笨重(存在延迟问题,因为中间需要连接一台额外的服务器)。

我已经阅读了有关 STUN 和 ICE 的信息,但我不知道有什么解决方案可以在我的树莓派上实现。

目标是我可以通过 SSH 连接到我的 PI,无论其网络配置(路由器/网络)和网络防火墙如何。

有人可以指出我应该在哪里或寻找什么的正确方向吗?

networking nat nat-traversal stun

7
推荐指数
1
解决办法
4126
查看次数

我们可以使用公共 STUN 服务器来创建我们的商业应用程序吗?

我刚刚开始学习 WebRTC 来实现音频和视频应用程序,并且知道有各种公共眩晕服务器可用于对等连接。但我有点困惑我可以将这些公共服务器用于商业应用程序吗?

另外,我想知道如果我想创建商业应用程序,是否有任何教程或指南可以让我了解如何制作和部署自己的眩晕或转向服务器?

voip nat stun webrtc turn

7
推荐指数
1
解决办法
2974
查看次数

如何在不让Docker弄乱iptables的情况下将源IP转发到Docker容器

如果你在Docker容器中运行某些东西(例如nginx)并将一个暴露的端口发布到外部世界(比如docker run -p 80:80 nginx),那么Doc​​ker将会

  • 将端口暴露给公众
  • 设置iptables,这样如果有东西通过Docker网桥(NAT)连接到容器,那么nginx仍然会知道正确的源IP
  • !完全打开防火墙到该端口

我不想让任何人连接到已发布的端口,但Docker将其搞砸了.所以我重新启动了Docker守护进程--iptables=false,允许我自己管理防火墙.但是,nginx现在只将桥(172.18.0.1)视为源地址.

如何控制防火墙并仍然将源IP地址转发到容器?

firewall bridge iptables nat docker

7
推荐指数
0
解决办法
767
查看次数

为什么我们需要AWS中的私有子网+ NAT转换?我们不能只使用公共子网+正确配置的安全组吗?

因此,AWS中私有子网的目的是使其实例无法直接从外部访问.然而,有些情况(成功抵制'实例'双关语),其中实例可以访问互联网.一个这样的用例可以是例如下载软件更新.

实现这一目标的"标准"方法是使用NAT网关和路由表中的规则,将所有出站流量指向它(0.0.0.0/0 - > nat-gw).

令我困惑的是:我们不能只使用具有正确配置的安全组(SG)的公有子网来拒绝入站流量并允许特定的出站流量吗?由于SG是有状态的,它们应该允许对出站流量的响应通过,就像NAT网关一样.

我假设我只是遗漏了一些东西,或者上面的配置在某些方面受到限制,我只是没有看到.但是我无法找到答案.

nat subnet amazon-web-services aws-security-group

7
推荐指数
2
解决办法
447
查看次数

NAT 网关是否需要 Internet 网关?

我需要一个关于 AWS 服务的快速问题。 NAT 网关是否需要 Internet 网关?

networking nat amazon-web-services

7
推荐指数
1
解决办法
6291
查看次数

Python3 NAT打洞

我知道这个话题并不新鲜。尽管有各种信息,但没有提供可靠的解决方案(至少我没有找到)。我有一个用 python3 编写的 P2P 守护进程,最后一个元素是通过 TCP 连接 NAT 后面的两个客户端。我对这个主题的参考:

https://bford.info/pub/net/p2pnat/

在两个客户端都连接了会议点服务器后,如何使两个客户端直接相互连接?

TCP打孔问题

到目前为止我所做的:

自然洞

服务器:

#!/usr/bin/env python3

import threading
import socket

MY_AS_SERVER_PORT = 9001

TIMEOUT = 120.0
BUFFER_SIZE = 4096

def get_my_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        # doesn't even have to be reachable
        s.connect(('10.255.255.255', 1))
        IP = s.getsockname()[0]
    except Exception:
        IP = '127.0.0.1'
    finally:
        s.close()
    return bytes(IP, encoding='utf-8')

def wait_for_msg(new_connection, client_address):
    while True:
        try:
            packet = new_connection.recv(BUFFER_SIZE)
            if packet:
                msg_from_client = packet.decode('utf-8')
                client_connected_from_ip = client_address[0]
                client_connected_from_port = client_address[1]

                print("We have …
Run Code Online (Sandbox Code Playgroud)

python sockets tcp nat hole-punching

7
推荐指数
1
解决办法
3989
查看次数

如何为 Azure 容器实例配置静态出站 IP

我必须通过静态出站 IP 同步一些数据,我需要事先将这些数据列入数据提供商的白名单。因此,我想为 ACI(Azure 容器实例)配置静态出站 IP 地址。如果没有经济高效的方法来执行此操作,我也可以决定将其配置为应用服务 Web 应用程序,但是,由于资源隔离,ACI 是首选。(因此,一名行为不端的工人无法让整个工人池瘫痪。)

作为参考,这里是我想要实现的目标的简单图表。为简单起见,我将 Web Apps 和 ACI 添加到映像中,但我只需要其中之一,最好是 ACI。

所需解决方案的简化图

我在过去几天阅读了相关的微软文档,所以我知道有多种方法可以做到这一点,但是,令我惊讶的是官方解决方案比我想象的要复杂和昂贵得多。

我尝试过的事情

  • 为应用服务计划配置 NAT(有效,但不是必需的)
  • 使用 ACI 在 vNet 前面部署防火墙(“官方”方式)
  • 在内部包含 ACI 的 vNet 前面配置 NAT(Azure 表示不支持,但可以)
  • 我也尝试过应用程序网关和负载均衡器,但它们仅适用于入站 IP 地址,因此与此问题无关

为应用服务 Web 应用配置 NAT
这可行,但不是所需的解决方案。我可以将 Web 应用程序放入 vNet 中的子网中,然后使用该子网的静态 IP 地址配置NAT 网关。这按预期工作,运行

curl api.ipify.org.
Run Code Online (Sandbox Code Playgroud)

Web 应用程序内将返回我在 NAT 网关中配置的静态 IP 地址。此方法的问题在于,它使用的 Web 应用程序在同一应用程序服务计划上的应用程序之间没有资源使用隔离。

使用 ACI 在 vNet 前面部署防火墙
这是文档中建议的“官方方法”。(顺便说一句,我永远无法按照指南使其工作,但这不是主要问题。)我的主要问题是复杂性和价格。我们不需要防火墙,添加一个防火墙和管理它的负担是我们在这个特定项目中不需要的额外复杂性。价格也很荒谬,我们想要配置一个静态出站 IP,而建议的方式所带来的价格涨幅比我们为应用程序的其余部分支付的价格还要大。(我们每月支付约 400 美元,防火墙起价约 600 美元。)

所以这不是首选。

在包含 ACI 的 vNet …

nat azure azure-virtual-network azure-container-instances

7
推荐指数
1
解决办法
1486
查看次数