我的机器运行的是 Windows 7 Ultimate。到目前为止,这是我所做的(成功):
但是,当我尝试从我自己的机器上访问http://XXX.XX.XX.XX/index.php 时,或者从远离我的网络的计算机上访问http://XXX.XX.XX.XX/index.php 时,无论哪种方式......我都一无所获。它尝试连接一段时间(不成功)但最终放弃了。
这是我想知道的:
首先十分感谢!
我有一个 LXC 容器 ( 10.0.3.2) 在主机上运行。服务正在容器内的端口上运行7000。
从主机 ( 10.0.3.1, lxcbr0),我可以访问服务:
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)
我想让外部世界可以访问在容器内运行的服务。因此,我想7002将主机上的端口转发到7000容器上的端口:
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)
结果是 ( iptables -t nat -L):
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
Run Code Online (Sandbox Code Playgroud)
尽管如此,我仍无法使用转发端口从主机访问该服务:
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
Run Code Online (Sandbox Code Playgroud)
我觉得我在这里错过了一些愚蠢的东西。我应该检查哪些事项?调试这些情况的好策略是什么?
为了完整起见,这里是如何iptables …
我正在使用 nginx 来为 PHP 应用程序的实例提供服务,同时还运行一个 Ratchet 应用程序来侦听 websocket 连接。问题是,这两个实例都使用相同的端口 (80)。
如何设置服务器以便我可以同时提供两者?
编辑:刚回来看到这个问题已经被否决了好几次,可以理解的是,我并没有真正清楚地提出这个问题。我为此道歉。不过,我确实做了尽职调查。我会试着澄清我在问什么,我可能误解了 websocket 协议的某些方面,在这种情况下,请纠正我:
我很清楚只能有一个进程侦听特定端口,我实际上遇到了一些问题,这是整个 websocket 的事情,据我所知,websocket 请求以 HTTP 握手开始,之后会有机制将该会话“升级”到特定端口。
从我阅读的内容来看,这种升级机制似乎是由网络服务器处理的。那么,如何配置nginx来处理这个过程呢?
总而言之,我担心在 80 以外的端口上运行 websocket 服务器的一件事是端口被阻塞的可能性。这种担忧是没有根据的?关于我应该如何设置的任何建议?
我使用动态SSH端口转发(-D)和正常的SSH端口转发(-L或-R用于许多不同的事情,包括增加的加密层,以我的无线网络流量)。我通常使用的命令如下所示:
ssh -l raam -D 9000 my-linux-server.com
Run Code Online (Sandbox Code Playgroud)
启动隧道后,我将 Web 浏览器配置为使用端口 9000 的 127.0.0.1 SOCKS v5 代理。现在浏览器中的所有流量(DNS 除外)都通过 SSH 隧道传输。
当我准备关闭隧道时(例如,当我将笔记本电脑带到另一个位置时),我只需键入“ logout”。但是,SSH 会话挂起,我必须按CTRL+c才能恢复本地提示。
为什么会发生这种情况,我该如何预防?
(我的猜测是我通过隧道打开的连接保持打开状态,我的本地 SSH 客户端正在等待它们关闭,然后再给我提示。如果是这种情况,我如何强制所有这些连接在我'我准备退出?)
我想通过公共可访问服务器(公共)连接到 NAT 后面的我的计算机(本地)。
在本地:
ssh -g -R 8000:localhost:22 user@public
Run Code Online (Sandbox Code Playgroud)
然后公开:
ssh -p 8000 user@public
Run Code Online (Sandbox Code Playgroud)
但我越来越 error: Connection refused.
当我登录到公共服务器时,我可以通过以下方式验证隧道是否正常工作:
ssh -p 8000 localhost
Run Code Online (Sandbox Code Playgroud)
它在本地计算机上打开 ssh。
我怀疑公共服务器应该充当透明代理有什么问题吗?或者如何让它像那样工作。
如何设置 SSH 命令以允许端口转发但不执行命令。
我知道 ssh 登录可以使用 -N 来停止执行命令,但是可以设置 ssh 配置文件来禁止它吗?
在 Linux 中限制 shell 的类型和路径是可选的,但是可以在 SSH 配置本身中完成吗?
我正在寻找一种通过 LAN 在 linux 机器上使用远程串行端口的方法。这台机器正在运行 ubuntu 10.04 并且我有一个 arduino 板连接到它,我希望能够通过 LAN 重新编程或监听/对话它的串行输出。
如果客户端软件独立于平台,但仅 linux 客户端也可以,那就太好了。
谢谢!
更新:
有一些类似的 Windows 程序:http : //www.hw-group.com/products/hw_vsp/index_en.html http://www.serial-port-communication.com/serial-over-tcpip/(这个似乎有一个 linux 版本,但它不是开源的......)
最后实际上维基百科有一些有用的注释和参考:http : //en.wikipedia.org/wiki/COM_port_redirector
UPDATE2:最有趣的候选人: http ://lpccomp.bc.ca/remserial/
我需要将所有连接到任何地址端口 22 转发到不同的网关(即没有默认值)。首先我想用ipfw来做:
sudo ipfw add 5 fwd $EXTERNAL_IP,22 tcp from any to any 22 keep-state
Run Code Online (Sandbox Code Playgroud)
但是对于 Mac OS X Lion,它似乎不起作用。无论如何,查看 ipfw 文档我发现它已被弃用,我应该使用 pfctl。
所以我修改了/etc/pf.conf文件:
rdr proto tcp from $internal_ip to any port 22 -> $external_ip port 22
Run Code Online (Sandbox Code Playgroud)
但没有运气。
有谁知道如何将本地应用程序生成的所有连接转换或转发到任何地址,但端口 22 到不同的网关/IP 地址?
更新
按照 Jake 的建议,我尝试仅指定目标 IP,因此我将 rdr 规则转换为 mac os x 语法:
rdr proto tcp from any to any port 22 -> $external_ip port 22
Run Code Online (Sandbox Code Playgroud)
即使在这种情况下,我也没有得到预期的结果,即我可以通过 ssh 连接到我的服务器,但通过默认网关。
这看起来很简单,但我不能让它工作。
我有一个非常简单的网络服务器,只需要做两件事:
这不起作用:
RewriteRule ^$ http://localhost:4000
Run Code Online (Sandbox Code Playgroud)
从请求者的角度(即,在客户端的机器上),这将流量重定向回 localhost:4000。
我对 VirtualHost 的有限理解表明这是针对 atom.example.com 之类的,而不是 example.com/atom
我想我必须使用 ProxyReverse,但我找不到正确的组合。
更新:尝试由 Shane Madden 给出的 ProxyPass/ProxyReverse 建议会在错误日志文件中产生:
[Thu Mar 15 11:59:15 2012] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:4000 (localhost) failed
[Thu Mar 15 11:59:15 2012] [error] ap_proxy_connect_backend disabling worker for (localhost)
[Thu Mar 15 11:59:17 2012] [error] proxy: HTTP: disabled connection for (localhost)
Run Code Online (Sandbox Code Playgroud)
(本地服务器肯定运行在127.0.0.1:4000)
我拉了一个 Docker 镜像:
$ docker pull ghost
Run Code Online (Sandbox Code Playgroud)
并从图像运行一个容器:
$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc
Run Code Online (Sandbox Code Playgroud)
我的理解是,-p交换机会将主机上的端口 (8080) 映射到 Docker 内部的端口 (2368),以便我可以从 Docker 外部(即从我的主机)访问在 Docker 内运行的 Web 服务器。
但是,当我尝试从我的主机浏览 Chrome 中的以下任何地址时:
http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
This webpage is not available
ERR_CONNECTION_REFUSED
Run Code Online (Sandbox Code Playgroud)
这似乎可能是连接问题,而不是容器内部的问题,因为当我检查容器内部正在运行的进程时,似乎 NodeJS 正在运行:
$ docker top test-ghost
UID PID PPID ... CMD
docker 4290 1028 ... npm
docker 4324 4290 ... sh -c node index
docker 4325 4324 ... node index
Run Code Online (Sandbox Code Playgroud)
但似乎没有在端口 8080 上侦听:
$ …Run Code Online (Sandbox Code Playgroud) port-forwarding ×10
ssh ×3
port ×2
ssh-tunnel ×2
apache-2.2 ×1
docker ×1
iis ×1
iis-7.5 ×1
iptables ×1
linux ×1
lxc ×1
mac-osx ×1
networking ×1
osx-lion ×1
router ×1
serial ×1
socket ×1
tcpip ×1
ubuntu ×1
url ×1