手册中说:“不可能转发主机端口 < 1024:在基于 Unix 的主机(例如 Linux、Solaris、Mac OS X)上,不可能从非 root 运行的应用程序绑定到低于 1024 的端口”。
是否可以禁用此限制?我运行主要的互联网服务(例如邮件服务器,例如(SMTP、IMAP、LDAP、HTTP、HTTPS),作为 VBoxHeadless 机器,并通过 VBoxManagemodifyvm --natpf1 捕获主机的端口)。我现在能看到的唯一解决方案是捕获较高的端口并通过 iptables 或 redir 重定向较低端口的流量。但也许有更自然的解决方案?
快速总结:转发的端口在外部世界有效,但从使用外部 IP 的内部网络连接被拒绝。
这是一个简化的情况,以使解释更容易:
我有一台在端口 12345 上运行服务的计算机。该计算机具有内部 IP 192.168.1.100,并直接连接到具有内部 IP 192.168.1.1 和外部(公共、静态)IP 1.2.3.4 的调制解调器/路由器。(路由器是TP-LINK TD-w8960N)我在端口12345设置了端口转发(虚拟服务器),转到192.168.1.100的12345端口。
如果我从同一台计算机运行 telnet 192.168.1.100 12345 一切正常。但运行 telnet 1.2.3.4 12345 表示连接被拒绝。如果我在另一台计算机上执行此操作(在同一内部网络上,连接到路由器),则会发生同样的情况。这看起来端口转发不起作用。然而...
如果我在我的外部 IP 和服务端口上运行在线端口检查服务,它会显示该端口已打开,我可以看到远程服务器正在连接并立即关闭连接。使用另一台通过移动连接连接到互联网的计算机,我还可以使用 telnet 1.2.3.4 12345 并且获得有效的连接。
因此,端口转发似乎有效,但使用内部网络的外部 IP 却无效。我不知道是什么原因造成的,因为另一个与此非常相似的设置(不同的路由器)适合我。我可以通过内部和外部 IP 从网络内部访问服务器上运行的服务。
注意:我知道我可以使用网络内部的内部 IP 来访问此服务。但如果我的笔记本电脑必须能够从内部和外部执行此操作,那么在软件配置中不断在 1.2.3.4 和 192.168.1.100 之间切换会很烦人。
路由器输出:
> iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 224.0.0.0/3
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 to:192.168.1.101
DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp …Run Code Online (Sandbox Code Playgroud) 我已经安装了 Proxmox 3.2,我正在尝试将虚拟机配置为处理所有流量并将它们转发到具有私有 ip 的节点的通信服务器。
我使用两个配置完全相同的 CentOS 虚拟机为 NAT 网络配置了服务器。
Proxmox wiki 有一个非常有限和基本的 nat 网络文档。
我在这里和 proxmox 论坛上发现了类似的问题(这个,这个)。我试图了解linux nat 网络的基础知识,所以我从头到尾完成了这个非常容易理解的教程。我阅读了这篇文章以了解iptables nat 规则
安装和配置后,当我从主机 ping 到 VM 或从 VM 到主机时,输出是:
root@testPrx:~# ping 10.0.4.2
PING 10.0.4.2 (10.0.4.2) 56(84) bytes of data.
From 10.0.4.1 icmp_seq=2 Destination Host Unreachable
Run Code Online (Sandbox Code Playgroud)
当我尝试从具有 Internet 连接和 (192.168.0.3) 的同一网络中的服务器通过 telnet 连接到通信服务器的公共 IP 时
bash-4.1# telnet 192.168.0.2 2701
Trying 192.168.0.2...
telnet: connect to address 192.168.0.2: No route to host
Run Code Online (Sandbox Code Playgroud)
当我尝试 …
我的大脑在试图弄清楚这一点时有点受不了,但我似乎无法让私有子网连接到互联网来获取更新。基本上我想要的是这些服务器的网络访问。我已经尝试过在其他帖子中找到的解决方案,但很容易遗漏一些东西,因为我已经研究了很长一段时间。
到目前为止,我已经完成了以下设置:
我能够通过 SSH 跳转到 NAT 实例,然后转到私有服务器,所以我知道很多都在工作。我已经通过 ping 内部地址验证了我的规则,但是当我离开本地网络时,我开始遇到问题。
我需要在哪里查看或我需要排除哪些故障以帮助缩小范围?是否有一些需要在我忽略的 NAT 实例上完成的配置?
编辑:配置更新
私有子网路由表:
指向公共子网中的 NAT 实例。无法访问互联网,将 EIP 附加到面向互联网的公共接口。

公共子网路由表:
将公共子网指向 IGW,我已验证 Internet 访问。

想法:
我开始认为需要在位于公共子网中的 NAT 实例上设置或创建一些东西来转发来自私有实例的流量,但我不确定需要添加什么。我发现这篇文章解释了在 iptables 中添加伪装规则,这适用于我的情况吗?
我有一个 MikroTik RouterOS 6.23 设备,我的网络如下:
Router
|
|-- bridge1_LAN (wlan1 + ether1) (192.168.0.210) -- LAN (192.168.0.0/24)
| Here is where computers are. Those include some servers and some users.
| Users should be able to navigate always, and servers should
| be reachable online always.
|
|-- ether2_ADSL (192.168.2.2) -- ADSL router (192.168.2.1) -- WAN
| Users should navigate through here because there is no traffic limit.
| Incoming traffic should work exactly as with ether3_3G, as a temporary
| …Run Code Online (Sandbox Code Playgroud) 我有两个 Docker 容器,我试图以特定方式将它们联网。容器 A 在端口 6379 上运行 Redis 服务器。容器 B 正在运行交互式 shell,需要访问 Redis。使用 Docker 的链接功能,容器 B 中的用户可以通过 10.1.0.2:6379 连接到 Redis,该地址通过 Docker 设置的虚拟 eth0 接口传输。
有一个程序将在容器 B 中运行,它希望 Redis 在环回接口的 6379 端口可用。假设此程序无法配置为指向不同的 IP。
我想将流量转发到 127.0.0.1:6379 到 10.1.0.2:6379。我在 NAT 表上尝试了几种 iptables 规则的变体,但是在尝试连接到本地地址/端口时,我要么得到“连接被拒绝”,要么连接永远挂起。用什么iptables规则可以达到这个效果?
这是我尝试过的一件事:
$ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A INPUT -d 10.1.0.2/32 -p tcp -m tcp --dport 6379 -j SNAT --to-source 127.0.0.1
-A OUTPUT -p tcp -m tcp --dport …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 pf重新创建这个 iptables 设置(来自https://github.com/darkk/redsocks):
iptables -t nat -A REDSOCKS -p tcp -d 10.0.0.0/8 -j REDIRECT --to-ports 12345
iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
Run Code Online (Sandbox Code Playgroud)
我想将所有去往 10.0.0.0/8(无论是什么端口)的连接重定向到本地端口 12345。在 linux 中,这适用于上述指定的规则。现在我正在尝试在 Mac OS X 上重新创建它。目前我没有尝试过,例如
rdr inet proto tcp from any to 10.0.0.0/8 port 0:65535 -> 127.0.0.1 port 12345
Run Code Online (Sandbox Code Playgroud)
我已经设置了sysctl net.inet.ip.forwarding=1
我不确定甚至 rdr 规则是否等同于 iptables nat 重定向。Redsocks 要求连接保持目标 IP/端口,以便通过代理正确转发。所以我想包中的目的地不应该更改/重写为 127.0.0.1:12345。
我当前的设置包括 pfSense 防火墙,该防火墙将公共 WAN 流量转发到 NAT 内部 IP。
例子:
这按预期工作,流量正确转发。我遇到的问题是我在 Nginx 日志中看到了本地 IP(即 pfSense 路由器 IP,在本例中为 192.168.1.1)。
我已经搜索过很多文章都建议使用 real_ip 模块,并设置 X-Forwarded-For 标头,但这不起作用。
笔记:
以下是网络拓扑的概述:
无论是弗里茨!盒7340和的MikroTik HAP交流精简版路由器目前充当DHCP在两个局域网服务器,有效地分割网络。该的MikroTik路由器还配置了一个桥梁192.168.88.xxxLAN。
为了避免双NAT的麻烦,我想将MikroTik hAP ac lite重新配置为二层交换机。这样做比双 NAT 有优势。
所有 DHCP 和 NAT 都应由Fritz!Box专门处理。 此外,MikroTik hAP ac lite应该在相同的本地 IP 地址范围内有一个静态 IP 地址,这样它仍然可以通过其 Web 界面进行管理。
在弗里茨!盒的配置是不是一个问题。然而,我是一个管理MikroTik 的 RouterOS的新手,我在网上没有找到关于这个特定问题的说明。因此,我的问题是:
将MikroTik hAP ac lite配置为第 2 层交换机、删除其 DHCP 服务器同时保留用于管理的静态 IP 地址的(详细)步骤是什么?
顺便说一下,我使用的是 GNU/Linux,所以使用Winbox不是我的选择。
在 MikroTik 支持页面上,我看到了一篇关于如何配置 DHCP 中继的文章。但是,我不清楚 DHCP 中继是与第 …
我在另一个 Debian 防火墙后面的 Debian 服务器上使用 vsftpd。natting 是正确的,我可以从外部连接到 ftp 服务器。但是,当客户端发出PASV命令时,ftp 服务器会返回其内部 IP (192.168.0.19)。
我没有pasv_address在conf文件中设置指令,因此“地址是从传入的连接套接字中获取的”(从手册中复制)。在我看来,当外部客户端发出时PASV,应该返回防火墙的外部IP地址,而当内部客户端连接时,应该返回内部FTP服务器的IP。
当我将pasv_address指令设置为防火墙的外部 IP 时,一切都在外部正常工作,但随后在内部中断。当我将其设置为内部 IP 地址或注释掉 时pasv_address,内部客户端可以工作,但外部客户端则不能。
有人有任何见解吗?
编辑1:这是服务器端日志文件:
Thu Sep 7 10:36:15 2017 [pid 9093] FTP command: Client "x.x.x.x", "USER yyy"
Thu Sep 7 10:36:15 2017 [pid 9093] [yyy] FTP response: Client "x.x.x.x", "331 Please specify the password."
Thu Sep 7 10:36:15 2017 [pid 9093] [yyy] FTP command: Client "x.x.x.x", "PASS <password>"
Thu Sep …Run Code Online (Sandbox Code Playgroud) nat ×10
iptables ×3
routing ×3
ip ×2
mikrotik ×2
networking ×2
amazon-ec2 ×1
amazon-vpc ×1
dhcp-server ×1
dnat ×1
ftp ×1
kernel ×1
loopback ×1
mac-osx ×1
masquerade ×1
nginx ×1
pf ×1
pfsense ×1
proxmox ×1
redirect ×1
routeros ×1
switch ×1
virtualbox ×1
vsftpd ×1