![在我的路由器上设置互联网服务器的公共镜像(?)](https://linux22.com/image/1436356/%E5%9C%A8%E6%88%91%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E8%AE%BE%E7%BD%AE%E4%BA%92%E8%81%94%E7%BD%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%85%AC%E5%85%B1%E9%95%9C%E5%83%8F%EF%BC%88%EF%BC%9F%EF%BC%89.png)
我可以以某种方式设置镜子(这是我能想到的最好的词)我的路由器上的特定端口上是否存在可用的互联网服务器?
以下是我所拥有的:
- ISP 为我提供了一个静态 IP 地址(我能够在路由器上配置端口转发,以允许从互联网访问本地网络中的 Web 服务器)。
- 如果有帮助的话,我有带有原始固件的 D-LINK DIR-628 路由器。
- 我想要镜像一个互联网服务器。更具体地说,这是我租用的 Ventrilo 服务器。
我想要实现的目标:使用路由器的公共 IP 地址连接路由器时,应将连接重定向到 Ventrilo 服务器。我不需要任何额外的安全层(例如任何类型的授权)来使用此代理。
我需要这个的原因:一个人无法连接到 Ventrilo 服务器(其他人连接都没有问题)。我不知道具体原因,但他的 ISP 不合作,没有帮助他。所以我想在我的路由器上设置某种镜像/代理,这样他就可以使用我的路由器 IP 进行连接,并且此连接将重定向到 Ventrilo 服务器。
我尝试设置端口转发,但它不允许我将连接重定向到外部 IP。只能重定向到我的 LAN 上的 IP。
根据@fdmillion 提供的信息,我能够解决我的问题。
一般答案(如果您只需要转发 TCP):
- 我按照建议在路由器中创建了端口转发规则。
- 我使用 netsh 命令添加了到 Windows 的路由:
netsh interface portproxy add v4tov4 listenport=PORT listenaddress=LAN_IP_of_Windows_Machine connectport=PORT connectaddress=Internet_IP_of_Server
然而,Ventrilo 似乎同时使用 TCP 和 UDP。不幸的是,netsh 不支持 UDP,只支持 TCP。我使用单独的工具来转发 UDP(http://sourceforge.net/projects/pjs-passport/) 和 netsh 转发 TCP。Pjs-passport 不能同时转发 TCP 和 UDP。您只能为 TCP 或 UDP 为相同的地址和端口创建一条规则。
答案1
仅使用消费级路由器是无法完成这种事情的。
如果您愿意在网络内某处安装 Linux 机器并将端口转发给它,则可以让 Linux 使用 NAT 重定向连接。虽然 NAT 通常用于允许网络内的多台机器共享一个公共 IP 地址,但 NAT 并不局限于此用途,还可以用于各种有趣的路由技巧。
如果您的路由器支持,您也可以在路由器上安装替代固件(例如 OpenWRT),然后在路由器中执行此操作。但是,即使在这种情况下,也几乎需要一些 Linux 背景知识。
显然,如果您对 Linux 不太熟悉,那么仅针对此设置而言,这将是一个相当艰巨的学习曲线。除非您使用 Windows Server,否则我不知道 Windows 上的应用程序是否可以执行此操作;Mac OS X 可能能够使用其内置防火墙执行此操作,但我再次不确定。
供其他人参考,您可以按照以下方式实现此目的:
Public IP: 12.34.56.78
IP of destination server: 87.65.43.21
Local area NAT range: 192.168.1.0/24
IP of Linux box on LAN: 192.168.1.200
Port that should be forwarded: 1234
1. Use router controls to direct port 1234 of incoming traffic to 192.168.1.200.
2. On the Linux box, issue this command:
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.200 --dport 1234 -j DNAT --to 87.65.43.21:1234
Side note: If you are using OpenWRT or similar on a router, you would not need to forward the port as in step 1. Step 2's command would become:
iptables -t nat -A PREROUTING -p tcp -d 12.34.56.78 --dport 1234 -j DNAT --to 87.65.43.21:1234
3. Ensure port forwarding is on:
sysctl net.ipv4.ip_forward=1
请注意,你当然可以摆弄一些东西。如果你想接受例如,要连接到端口 4321,但仍连接到端口 1234,您需要更改选项--dport
以匹配您希望客户端连接到的端口。同样,要更改目标端口,您需要--to
相应地修改参数。
如果您的防火墙规则混乱,iptables -t nat -F
则会将所有与 NAT 相关的规则重置为其(空)默认值。
iptables
这是一个庞大的课题,可以写出很多关于它的书。如果你有 Linux 背景并且感兴趣,https://wiki.archlinux.org/index.php/iptables和http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO-7.html有一些很好的资源。
还有其他方法可以实现同样的目的 - 更经典的代理方法浮现在脑海中。例如,您可以在网络内设置 SOCKS5 代理。当然,在这种情况下,您必须非常勤奋由于开放的 SOCKS5 代理服务器的安全性,滥用的情况非常常见(人们使用开放的 SOCKS 服务器来破解基于 IP 的禁令,这只是一个卑鄙的伎俩。)
希望这可以帮助!