根据维基百科文章,微传输协议支持使用 UDP 打洞进行 NAT 穿越。但是查看libutp 的项目页面,我在头文件中找不到任何此类引用。我错过了一些明显的东西吗?或者NAT穿越是在其他地方实现的吗?
在 AWS 上,假设我在 3 个不同的可用区中有 3 个私有子网,我希望它们都能通过 NAT 网关访问 Internet。AWS 指南建议为每个子网使用单独的 NAT 网关和堡垒主机(当然,假设它们是需要的)。不用说,一切都在同一个 VPC(因此是同一个区域)中。
为所有私有子网共享相同的 NAT 网关是否会降低性能?
我在 Kubernetes 上有一个使用 GCP 运行的集群,以及一些在 App Engine 上运行的服务,我尝试在它们之间进行通信,但无法从外部访问 App Engine。
我创建了一个具有特定子网的私有 Kubernetes 集群,我将此子网链接到 Cloud NAT,以获得一个可以列入白名单的唯一出口 IP,并且我在 App Engine 防火墙规则中允许使用此 IP。
但是,当我从集群请求应用程序引擎时,我收到 403 响应,因为它没有通过防火墙。但是,如果我连接到 Kubernetes pod 并尝试请求站点了解我的 IP,我将获得在 Cloud NAT 中设置的 IP。
我在Cloud NAT文档中发现,到内部IP的转换是在应用防火墙规则之前实现的(https://cloud.google.com/nat/docs/overview#firewall_rules)。
有没有办法找回这个内部IP?或者另一种确保服务安全的方法?
我有一个试图在 Kubernetes 集群中运行的程序。该程序是一个使用基于 UDP 的非标准协议的服务器。该协议主要由短的请求/回复对组成,类似于 DNS。与 DNS 的一个主要区别是“服务器”和“客户端”都可以发送请求,即。通信可以由任何一方发起。
客户端是使用服务器 IP 地址配置的嵌入式设备。客户端将他们的请求发送到这个 IP。他们还检查传入消息是否来自该 IP,丢弃来自其他 IP 的消息。
我的问题是如何使用 Kubernetes 来设置服务器,以便
我尝试过但不起作用的一件事是设置一个Servicewithtype: LoadBalancer和externalTrafficPolicy: Local(后者为要求 2 保留源 IP)。此设置满足上面的要求 1 和 2,但由于出站消息不通过负载均衡器,因此它们的源 IP 是包含服务器的 pod 正在运行的任何节点的源 IP。
我在 Google Cloud Platform (GKE) 上运行 Kubernetes。
udp nat google-cloud-platform kubernetes google-kubernetes-engine
我对此有点迷失——我已经关注了AWS文档,但似乎我找不到更多的东西了。情况摘要是,我在 VPC 内有一个 EC2 实例,尽管按照 Amazon AWS 说明为 VPC 设置 NAT,但它无法访问 Internet。详情如下:
我有一个 VPC,其中有一个子网 (CIDR 10.0.0.0/24) 和一个 EC2 实例(它仅在 VPC 内具有私有 IP 地址,10.0.0.168)
我创建了一个互联网网关并将其附加到上述 VPC。
我为入站和出站流量创建了一个网络 ACL,其所有流量允许为 0.0.0.0/0,并将该 ACL 附加到 VPC 的唯一子网。
VPC 子网安全组还允许 0.0.0.0/0 的所有流量进出
我创建了一个 NAT 网关,它在 VPC 内有一个私有 IP 地址 (10.0.0.95) 和一个公共弹性 IP 地址(假设是 18.154.34.97,但我认为这并不重要)。该 NAT 网关连接到 VPC 的唯一子网。
我创建了与 VPC 子网 (10.0.0.0/24) 关联的路由表,并包含两个条目:
Destination Target
10.0.0.0/24 local
0.0.0.0/0 nat-gateway-id
Run Code Online (Sandbox Code Playgroud)
为了访问 VPC,我创建了一个地址范围为 10.1.0.0/22 的客户端 VPN 终端节点,并将其与正确的 VPN 子网关联。
我可以使用 OpenVPN 连接到客户端 VPN 终端节点并通过 ssh 进入 EC2 实例。但是,从那时起我无法访问互联网。同样,当连接到此客户端 …
我一直在阅读一些有关 WebRTC 的内容,但我不明白为什么如果只有 1 个对等方使用对称 NAT,而另一个既不使用对称也不使用端口限制 NAT,那么为什么我们需要 Turn 服务器,所以让 \xe2\x80\x99s假设 A 使用 Full Cone NAT,B 使用对称 NAT:
\nSTUN SERVER会将B的正确IP地址发送给A,将A的正确IP+端口地址发送给B。
\nA 尝试连接到 B(现在 A 将能够接受来自 B 的消息,因为它位于目标地址列中的\xe2\x80\x99)。
\nB 尝试连接到 A,这将允许从 A 发送到 B 的请求(ofc A 需要将端口更新为从 B 而不是 Sdp 接收到的端口)。
\n我是否遗漏了一些东西,或者这是正确的(并已实现),还是这太复杂而无法实现?
\n如果这是正确的,那么理论上,如果我\xe2\x80\x99m对等体A并且我使用Full Cone NAT,任何对等体B都可以连接到我(只要我先发送连接请求),而不需要转动服务器。
\n谢谢
\n我需要在两个用户之间建立P2P UDP和TCP连接.他们都是NAT的背后.一点研究让我想到了STUN,TURN和ICE.
有没有支持相同的开源iOS(库)?
iPhone中的FaceTime也使用ICE,STUN,TURN到NAT遍历,iOS SDK也暴露了这样的API吗?
我在resiprocate源代码(www.resiprocate.org)中找到了nICRr代码,我可以在Mac OS X上测试STUN部分.有没有人尝试过使用相同的iOS 4.0或更高版本?
谢谢,罗德尼
我的Spring应用程序运行在NAT防火墙(pfSense)后面的机器上.机器的内部IP是a.b.c.d,NAT IP是w.x.y.z
Spring配置的serviceUrl设置为a.b.c.d端口上的内部IP()1100,当我启动应用程序时,我提供以下开关:
-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=w.x.y.z -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
Run Code Online (Sandbox Code Playgroud)
如上所示,我进行了设置-Djava.rmi.server.hostname=w.x.y.z,以便可以通过NAT连接到应用程序.我还打开了机器防火墙上的相关端口,并设置了一个从w.x.y.z:1100前往的端口a.b.c.d:1100
当我尝试使用jconsole从网络外部连接到应用程序时w.x.y.z:1100,我得到了一个java.io.IOException: jmxrmi
java.io.IOException: jmxrmi
at sun.tools.jconsole.ProxyClient.checkSslConfig(ProxyClient.java:236)
at sun.tools.jconsole.ProxyClient.<init>(ProxyClient.java:127)
at sun.tools.jconsole.ProxyClient.getProxyClient(ProxyClient.java:483)
at sun.tools.jconsole.JConsole$3.run(JConsole.java:524)
Caused by: java.rmi.NotBoundException: jmxrmi
at sun.rmi.registry.RegistryImpl.lookup(RegistryImpl.java:136)
at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 当我正在编程网络聊天(java,但不应该对问题产生影响),并且想要使用UDP时,我遇到了它无法通过互联网工作的问题.经过一番研究后,我发现你必须为激活的特定端口进行端口转发.所以现在谈到我的问题:
UDP是否以不可配置的方式在Internet上工作?
例如,如果我要编写整个网络游戏,那么使用UDP是否有意义?或者我是否要求播放器激活Portforwarding并打开端口等?
什么时候使用UDP呢?为什么?
我实际上并不理解UDP的全部要点.
对于我的编程观点,我希望有一种方法可以直观地使用它.与创建DatagramSocket和创建一样DatagramPacket,使用数据和目的地配置数据包并通过互联网发送.
至于我的用户我不希望他们必须配置任何特定的东西,比如打开他们想要使用的确切端口等.我只是想让他们使用程序(服务器和客户端),它应该工作.
我有一个小的C#控制台应用程序作为网络服务器.它对同一网络中的设备的NAT响应很好,但是当我尝试从外部IP在浏览器中访问它时,我得到400.
路由器配置为端口转发,否则我得到404.
localhost:8888/test工作正常.也适用于任何设备的192.168.0.x:8888/test.
xxx.xxx.xxx.xxx:8888/test因HTTP错误400而失败.请求主机名无效.
有什么建议?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace httpsrv
{
class Program
{
static void Main(string[] args)
{
WebServer ws = new WebServer(SendResponse, "http://localhost:8888/test/");
ws.Run();
Console.WriteLine("Pi server started");
Console.ReadKey();
ws.Stop();
}
public static string SendResponse(HttpListenerRequest request)
{
return string.Format("<HTML><BODY>Hosted from rasp. pi!<br>{0}</BODY></HTML>", DateTime.Now);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Webserver类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace httpsrv
{
public class WebServer
{
private readonly …Run Code Online (Sandbox Code Playgroud) nat ×10
amazon-vpc ×2
firewall ×2
java ×2
stun ×2
turn ×2
udp ×2
bittorrent ×1
c# ×1
iphone ×1
jmx ×1
kubernetes ×1
networking ×1
spring ×1
tcplistener ×1
webrtc ×1
webserver ×1