我有 Windows 2008 服务器。它可以用作邮件、ftp、Web 服务器。在我的 LAN 中有其他服务器,我想从我的 LAN 外部使用 RDC 访问该服务器(例如:domail.com:5555 -> 192.168.0.2:3389)。是否有任何解决方案可以使用 Windows 防火墙转发此端口?
每个人都知道路由器就像防火墙一样工作。如果没有端口转发,则无法从路由器外部发起连接(无论是 TCP 还是 UDP)。但是,如果用户从路由器内部成功发起 TCP 连接,则路由器的双方就可以相互通信。
UDP 会发生什么?如果路由器后面的用户(他对端口转发根本不做任何事情)将 UDP 发送到外部 pc(假设没有任何防火墙或任何停止在该 pc 中接收数据报的东西),并且 pc 接收它。如果 PC 想要将一些数据发送回路由器后面的用户怎么办?用户能否接收到数据?或者数据可以通过路由器而无需任何特殊操作?
我问这个是因为每个人都知道 UDP 是无连接的。但是,我相信一些在线射击游戏使用UDP。如果我加入服务器玩,我不需要做任何关于端口转发的事情,但是我和服务器之间的udp数据传输仍然可以工作。
有什么可以向我解释一下吗?
非常感谢。
杰克
我正在使用端口转发来利用远程机器上的代理服务器。
远程机器主机名是remotemachine. 代理正在侦听 8118 端口。我正在将此端口转换为本地端口 5223。
ssh -vvv -N remotemachine -L 5223:localhost:8118
Run Code Online (Sandbox Code Playgroud)
如果我不使用超过 10 个同时连接,当 ssh 冻结时,一切都很好。它不再通过端口转发发送数据。
即ab -c 10 -t 5 -X 'localhost:5223' 'http://www.google.ru/'工作,但ab -c 20 -t 5 -X 'localhost:5223' 'http://www.google.ru/'导致 ssh 冻结
MaxSessions 30参数 in/etc/ssh/sshd_config根本没有帮助。
我该怎么做才能消除这 10 个连接限制?
-vvv输出中没有什么有趣的=(
我已经使用 apt-get 安装了 Hudson,并且 Hudson 服务器在example.com:8080.
因为example.com我使用标准端口 *:80 和一些虚拟主机这样设置:
# /etc/apache2/sites-enabled/subdomain.example.com
<Virtualhost *:80>
ServerName subdomain.example.com
...
</Virtualhost>
Run Code Online (Sandbox Code Playgroud)
以下是有关哈德逊过程的信息:
/usr/bin/daemon --name=hudson --inherit --env=HUDSON_HOME=/var/lib/hudson --output=/var/log/hudson/hudson.log --pidfile=/var/run/hudson/hudson.pid -- /usr/bin/java -jar /usr/share/hudson/hudson.war --webroot=/var/run/hudson/war
987 ? Sl 1:08 /usr/bin/java -jar /usr/share/hudson/hudson.war --webroot=/var/run/hudson/war
Run Code Online (Sandbox Code Playgroud)
我应该如何转发:
http:// example.com:8080
Run Code Online (Sandbox Code Playgroud)
到:
http:// hudson.example.com
Run Code Online (Sandbox Code Playgroud) 我在实现 NAT 的路由器后面有一台 Linux 机器和一台 Windows 机器(该图可能有点矫枉过正,但制作起来很有趣):

我将路由器上的 RDP 端口 (3389) 转发到 Linux 机器,因为我想审核 RDP 连接。为了让 Linux 机器转发 RDP 流量,我写了这些 iptables 规则:
iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination win-box
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
该端口正在 Windows 机器上侦听:
C:\Users\nimmy>netstat -a
Active Connections
Proto Local Address Foreign Address State
(..snip..)
TCP 0.0.0.0:3389 WIN-BOX:0 LISTENING
(..snip..)
Run Code Online (Sandbox Code Playgroud)
并且端口正在 Linux 机器上转发:
# tcpdump port 3389
tcpdump: verbose output suppressed, use -v or -vv …Run Code Online (Sandbox Code Playgroud) 我们目前将所有电子邮件存储在我们内部网络的 Dovecot IMAP 服务器上。网络上的客户端机器能够连接和访问他们的电子邮件。
现在我们希望允许某些用户能够使用 IMAP 从外部连接并查看他们的电子邮件。我们目前有一个带有专用(未使用)DMZ 端口的防火墙/路由器。在我看来,我们有两种选择:
有没有人对这两种方法的优点有任何建议/意见?
我发现很难想到在三足防火墙的 DMZ 中拥有额外的反向代理有什么读取优势,因为无论如何它几乎只是有效地进行端口转发。......或者我错过了什么?
这是我的场景。我有三个主机。
1) GATEWAY 运行 OpenVPN 服务器。它有 1 个 LAN IP (192.168.1.10) 和 1 个 OpenVPN IP (10.8.0.1)。
2)LOCAL-CLIENT,与GATEWAY在同一个局域网内的机器,有1个局域网IP(192.168.1.12)
3) REMOTE-SERVER,一个 MySQL 服务器,它是 OpenVPN 服务器的客户端。它有 1 个公共 IP 和 1 个 OpenVPN IP (10.8.0.51)。
我希望能够通过 VPN 从本地客户端连接到远程服务器上的 MySQL。
到目前为止,我已经启用了 IP 转发并添加了一个端口转发,如下所示:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A OUTPUT -p tcp --dport 3306 -j DNAT --to 10.8.0.51
Run Code Online (Sandbox Code Playgroud)
这适用于 GATEWAY,我可以使用 192.168.1.10 作为主机连接到 MySQL。但是当我从 LOCAL-CLIENT 尝试时,我收到“连接被拒绝”错误(使用 MySQL 客户端或 telnet 到端口 3306)。
我在这里缺少什么?
顺便说一句,我还尝试转发 HTTP 端口以针对也在远程服务器上运行的 Apache 进行测试,我得到了相同的结果,所以这不是 MySQL 问题。
更多信息:
Kernel IP …Run Code Online (Sandbox Code Playgroud) 我在 Azure 上运行的 Ubuntu 虚拟机上运行各种服务,我想远程访问某些服务,即使端口没有公开开放。为此,我设置了一个脚本来使用 SSH进行本地端口转发。
通常这是通过启动到远程主机的连接,执行sleep 10,并在 sleep 命令完成之前在转发的端口上建立连接来工作的。这在使用保持连接活动的服务时很有效,例如远程 SMB 共享。
但是我在访问 Web 服务时遇到问题,因为连接在一段时间后关闭 - 建立连接后 10-90 秒。
为了在它关闭时重新连接连接,我根据这个SO 线程编写了这个小脚本。
while true; do { \
while true; do \
echo echo ping; sleep 10; \
done } | ssh -f myapp.cloudapp.net -F .ssh/myapp.cloudapp.net_config \
-o ExitOnForwardFailure=yes sleep 10; echo "$(date) I died";
sleep 1;
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个“修复”有点不稳定,并且连接经常断开,因此浏览器每五个请求就会挂起。它有效,但远非完美,所以我想要一个更好的方法。也许可能有某种脚本进行长轮询之类的?有谁解决了这个问题?
我查看了 ssh 手册 ( man ssh) 并阅读了-L和-R选项的定义,但不太明白其中的区别。两者似乎都能够将请求转发到所需的主机和端口。有人可以尝试向孩子解释其中的区别吗……这两个选项之间的主要区别是什么?
我在 Mikrotik 路由器上设置了端口转发,但路由器操作系统 (v6.39.2)似乎比我习惯的标准现成路由器接口复杂得多。我按照这里的说明进行操作,这些是我在 IP/防火墙/NAT 中输入的设置:
- Chain: dstnat
- Protocol: 6 (tcp)
- Dst Port: 8000
- In. Interface: all Ethernet (for testing purposes)
- Action: dst-nat
- Log: yes (for testing purposes)
- To Addresses: 192.168.1.33
- To Ports: 8000
Run Code Online (Sandbox Code Playgroud)
因为看起来 8000 端口还没有在外网正式开放(等待有人这样做,同时我检查了它是否在yougetsignal.com 上打开)我想至少测试一下我的如果可能,端口转发规则在本地网络内有效。
当我尝试192.168.1.1:8000在 Web 浏览器中访问时,我在 NAT 规则设置的速率图中看到了一些活动。但是网络浏览器仍然只给我一个“无法访问此站点”的响应。
我希望它会将我转发到192.168.1.33:8000. 这应该可能吗?还是我做错了什么?
port-forwarding ×10
ssh-tunnel ×3
iptables ×2
linux ×2
router ×2
ssh ×2
apache-2.2 ×1
dmz ×1
hudson ×1
imap ×1
nat ×1
openvpn ×1
port ×1
proxy ×1
rdc ×1
ubuntu ×1
udp ×1
virtualhost ×1
windows ×1