在最近的一系列问题中,我已经提出了很多关于UDP,boost :: asio和c ++的问题.
我在Stackoverflow上似乎没有答案的最新问题是:
在客户机/服务器应用程序,这是相当好的,要求服务器在防火墙中打开一个端口,这样的消息被允许在.不过,这样做同样的客户端是绝对不是一个很好的用户体验.
TCP连接通常实现这一点,因为大多数路由器支持有状态数据包检查,如果原始请求来自本地主机,则允许响应数据包通过.
我不太清楚它如何与UDP一起工作,因为UDP是无状态的,并且没有"响应数据包"(据我所知).我应该如何在我的客户端应用程序中解释这一点?
谢谢你的回答!
我想用Java创建简单的聊天程序,它可以在p2p的基础上工作.使用公共服务器仅启动连接.但我甚至不确定这是可能的.
我成功地实现了Java中的聊天解决方案,如果至少有一台PC转发了正确的端口,那么它就可以工作.我还设法使用外部服务器而不必在客户端转发端口.
因此,我甚至可能以某种方式使用公共服务器启动连接,而不是在客户端之间发送数据,从服务器上卸载?
我不太熟悉路由器如何工作,但我希望当你从内部IP呼叫公共服务器时,路由器会记住来自该公共IP的呼叫和传入响应,而不是发送到你的PC.所以我想,也许如果第一个客户端连接到服务器,服务器而不是将信息传递给第二个客户端,也许他们可以以某种方式直接通信?路由器中的规则是否由服务器建立?
我希望我能清楚地解释清楚.如果没有,请原谅.我甚至都不知道这是怎么做到的,我只是想知道我的概念是否有正确的东西,而且我必须更加努力地学习它.谢谢.
我想使用 Vagrant 在我的本地机器(Mac OS X)上设置一个带有 UI 的 Consul 集群。到目前为止,我只是按照官方领事文档的入门说明进行操作:https : //www.consul.io/intro/getting-started/join.html
为了能够从主机访问 UI,我只是将这一行添加到提供的 Vagrantfile ( https://github.com/hashicorp/consul/blob/master/demo/vagrant-cluster/Vagrantfile )
n1.vm.network "forwarded_port", guest: 8500, host: 8500
Run Code Online (Sandbox Code Playgroud)
要在来宾机器上使用 UI 启动 Consul,我 ssh 进入机器,然后简单地将 -ui 标志添加到提供的命令中:
consul agent -server -bootstrap-expect=1 \
-data-dir=/tmp/consul -node=agent-one -bind=172.20.20.10 \
-enable-script-checks=true -config-dir=/etc/consul.d -ui
Run Code Online (Sandbox Code Playgroud)
Consul 启动时没有问题,从我可以执行的来宾机器开始:
curl -v 'http://localhost:8500/ui/'
Run Code Online (Sandbox Code Playgroud)
并返回预期的 HTML 页面。
但是,尝试http://localhost:8500/ui/
在浏览器中访问或通过主机上的 curl访问不起作用。在主机上使用 curl 会导致:
* Trying ::1...
* TCP_NODELAY set
* Connection failed
* connect to ::1 port 8500 failed: Connection refused
* Trying 127.0.0.1...
* …
Run Code Online (Sandbox Code Playgroud) 我有一个远程服务器,我想对其进行 ssh 并将我的本地端口转发到其中。
我的应用程序在我的本地计算机上托管端口 443。我正在使用连接到服务器gcloud
。这是命令:
gcloud compute --project "**^" ssh --zone "***" "***"
Run Code Online (Sandbox Code Playgroud)
目标是允许其他人在端口 9000 上与服务器进行通信,并且此流量将重定向到我的本地计算机的端口 443 上。换句话说,在端口 9000 上访问服务器相当于在端口 443 上访问我的计算机。
所以我做ssh端口转发
gcloud compute --project "**^" ssh --zone "***" "***" -- -L 443:127.0.0.1:9000 -N
Run Code Online (Sandbox Code Playgroud)
并返回此错误:
bind: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 443
Could not request local forwarding.
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我在没有 helm 的情况下在kubernetes上安装了istio。
我可以看到 Pod 和服务是在 istio-system 命名空间中创建的。
所有服务(如grafana、Prometheus)都会被创建,并且它们的端口不会暴露。
由于创建了负载均衡器服务,因此在 AWS 中也创建了一个负载均衡器,我想通过新创建的负载均衡器端点从外部网络访问 grafana、prometheus 等仪表板,但无法从负载均衡器端点访问该仪表板。
我尝试了 istio 文档推荐的端口转发:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &
Run Code Online (Sandbox Code Playgroud)
这些仅适用于http://localhost:3000 ,但无法通过http://publicip:3000访问
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 172.20.192.71 <none> 3000/TCP 1m
istio-citadel ClusterIP 172.20.111.103 <none> 8060/TCP,15014/TCP 1m
istio-egressgateway ClusterIP 172.20.123.112 <none> 80/TCP,443/TCP,15443/TCP 1m
istio-galley ClusterIP 172.20.45.229 <none> 443/TCP,15014/TCP,9901/TCP 1m
istio-ingressgateway LoadBalancer 172.20.94.157 xxxx-yyyy.us-west-2.elb.amazonaws.com 15020:31336/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:32146/TCP,15030:30126/TCP,15031:31506/TCP,15032:30501/TCP,15443:31053/TCP 1m
istio-pilot ClusterIP 172.20.27.87 <none> …
Run Code Online (Sandbox Code Playgroud) 我可以通过 ssh 进入跳转主机,从那里我可以访问 k8 集群。有一个特定的 pod,其 UI 暴露在端口 4040 上,我如何在本地浏览器上查看它?
到目前为止,通过执行以下命令我已经弄清楚了
kubectl port-forward podName 4040:4040
Run Code Online (Sandbox Code Playgroud)
我现在可以在 Jumphost 上访问 UI(通过基于文本的浏览器)
我有以下问题。我正在使用 Debian GNU/Linux Stretch,并尝试使用 netcat 作为简单的服务器。我使用以下命令启动它:
$ netcat -l 127.0.0.1 33333
Run Code Online (Sandbox Code Playgroud)
它启动得很好并接受连接,但端口与请求的端口不同:
$ netstat -tulpn | grep netcat
tcp 0 0 0.0.0.0:38782 0.0.0.0:* LISTEN 2851/netcat
Run Code Online (Sandbox Code Playgroud)
此行为与请求的端口、用户或 ufw 状态无关。最近我用以下软件包安装了 LXC:
后来所有内容都被删除了,但不知何故,我觉得这种行为可能与配置中的一些更改有关。
我node http server
在vagrant
VM 上运行很简单。我想用我本地计算机上的浏览器解决这个问题。
varhttp=require("http");
http.createServer(function(request,response){
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(3000);
Run Code Online (Sandbox Code Playgroud)
这是我的Vagrantfile:
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.provision "shell", path: "config.sh"
end
Run Code Online (Sandbox Code Playgroud)
我不知道如何从浏览器中解决它。
每当我curl localhost:3000
在无所事事的VM中执行操作时,都会收到Hello world
消息。
正如流浪转发中所建议的,This site can’t be reached
每当我尝试打开时localhost:8080
,我都会从我的本地机器上得到。
我试图在我的路由器(ZTE F660)中启用端口转发,但由于某种原因它根本不起作用。首先,我在 ubuntu 计算机中启动了服务器应用程序,并将其 IP 地址固定为 192.168.1.2。然后,我设置规则如下:
它不起作用。因此,我尝试在路由器设置中禁用防火墙:
它也不起作用,然后我通过输入以下内容禁用了主机的防火墙:
sudo ufw disable
Run Code Online (Sandbox Code Playgroud)
但这没有用。然后,我尝试使用许多不同的端口,但没有成功!:(
我尝试使用一些端口转发测试器(例如:https: //hidemy.name/en/port-scanner/),它总是说端口的状态是“已过滤”。我打电话给我的互联网提供商,他们说端口转发应该运行,但他们没有提供技术帮助。谁能帮我这个?无法思考还有什么可做的。
portforwarding ×10
kubernetes ×2
linux ×2
node.js ×2
router ×2
vagrant ×2
client ×1
consul ×1
devops ×1
firewall ×1
gcloud ×1
istio ×1
kubectl ×1
localhost ×1
macos ×1
netcat ×1
networking ×1
p2p ×1
port ×1
ssh ×1
ssh-tunnel ×1
udp ×1
virtualbox ×1