今天我在主机系统上的 iptables nat停止工作,我不知道发生了什么!(这很糟糕,我知道)
所有命令都以 root 用户身份执行。
如果我运行,$ iptables -t nat -L我会收到以下错误消息:
$ iptables -t nat -L
iptables v1.4.7: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Run Code Online (Sandbox Code Playgroud)
没有可用的进一步更新。我还用几个旧内核重新启动了服务器,但我总是收到相同的错误消息。
我的服务器在 CentOS 上运行,使用最新版本的官方 OpenVZ 内核。
$ uname -r
2.6.32-042stab088.4
Run Code Online (Sandbox Code Playgroud)
还测试了内核版本:2.6.32-042stab85.20 和 2.6.32-042stab084.26
grub.conf 中的第一个内核:
title OpenVZ (2.6.32-042stab088.4)
root (hd0,1)
kernel /vmlinuz-2.6.32-042stab088.4 ro root=/dev/md2 rd_NO_LUKS rd_NO_DM nomodeset crashkernel=auto SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=de
initrd /initramfs-2.6.32-042stab088.4.img
Run Code Online (Sandbox Code Playgroud)
安装了以下更新:
$ …Run Code Online (Sandbox Code Playgroud) 我有一个带有路由器的小型网络,它与 Internet、服务器和本地网络中的一些工作站保持连接。

服务器旨在从 Internet 访问,并且在路由器 iptables 中设置了几个 DNAT 条目,如下所示:
-A PREROUTING -i ppp0 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
Run Code Online (Sandbox Code Playgroud)
外部数据包通过ppp0接口到达路由器,内部数据包来自br-lan,实际上包括交换机和 WLAN 适配器。问题是,虽然外部访问工作正常,但尝试通过 DNS 解析的外部 IP(分配给ppp0)从 LAN 内部访问服务器失败。
我能够发明的唯一解决方案是向路由器添加/etc/hosts指向内部 IP 的静态条目,但由于没有通配符(并且我至少为该系统分配了三个顶级域,不包括数十个子域),这相当脆而且容易失败。你能提出更好的建议吗?
我只找到了这个问题,这不是很有帮助。
如果这是相关的,路由器运行带有 dnsmasq 的 OpenWRT 10.03 Kamikaze。
除了使用 GoGoNet 之类的家用电脑上的 4to6 隧道之外,我还没有使用过 IPv6。我已经阅读了它的一般工作方式。不需要(或建议)NAT,每个客户端都使用公共 ipv6 地址,我理解防火墙的继续使用。根据我的理解,如果不使用 NAT、UAL 和让 ARIN 为您提供自己的全局范围,这意味着您局域网上所有系统上的 ipv6 地址将来自您的 isp 提供的范围。如果您更改 ISP,会发生什么?这是否意味着您必须更改整个局域网地址范围?
在典型的 ipv4 窗口商店中,我可能会遇到这样的情况:
Site1 Lan IPs: 192.168.1.0/24
Site2 Lan IPs: 10.0.0.0/24
Site1 Public IP: 11.12.13.1/29 (11.12.13.1 - 11.12.13.5 usable)
Site2 Public IP: 20.30.40.1/29 (20.30.40.1 - 20.30.40.5 usable)
Site-to-site VPN via firewalls
Site1: Lan IP, Public IP:Port
Hardware firewall/router - 192.168.1.1, 11.12.13.1
Windows AD DC server (AD DNS server) - 192.168.1.10
Windows Exchange (email) - 192.168.1.11, 11.12.13.2:25+443
Windows RDS (term server) - 192.168.1.12, 11.12.13.3:3389 …Run Code Online (Sandbox Code Playgroud) 我有一个带有 1 个以太网卡和 2 个公共静态 IP(188.120.245.4 和 188.120.244.5)的服务器(Debian Squeeze)。
我想要什么:通过静态 IP (188.120.244.5) 访问设置虚拟框 (Ubuntu)。
我在尝试什么:
我现在拥有的是:不工作的配置。
Debian-host-machine# cat Vagrantfile
Vagrant::Config.run do |config|
config.vm.define :gitlab do |box_config|
box_config.vm.box = "ubuntu"
box_config.vm.host_name = "ubuntu"
box_config.vm.network :bridged
box_config.vm.network :hostonly, "188.120.244.5", :auto_config => false
end
end
Debian-host-machine# ifconfig
eth1 Link encap:Ethernet HWaddr 00:15:17:69:71:bb
inet addr:188.120.245.4 Bcast:188.120.247.255 Mask:255.255.248.0
lo Link …Run Code Online (Sandbox Code Playgroud) 我有一个像这样的小脚本来配置 iptables:
#!/bin/bash
PRE_STR="iptables -t nat -A PREROUTING -p tcp -j DNAT"
FOR_STR="iptables -A FORWARD -p tcp -j ACCEPT"
#####################################
# instances
CM="10.0.1.137"
MASTER="10.0.1.149"
MYSQL="10.0.1.83"
REPORTING="10.0.1.85"
#####################################
# Clear Iptables
iptables -F
iptables -t nat -F
#####################################
# Forward to enable Internet on private nodes
iptables -t nat -A POSTROUTING -j MASQUERADE
#####################################
# Port forwarding
forward()
{
$PRE_STR --dport $1 --to $2:$3
$FOR_STR --dport $3 -d $2
}
#what from to ip to port
forward 3222 $CM 22
forward …Run Code Online (Sandbox Code Playgroud) 我们有一个简单的路由器,它具有对称类型的 NAT,但是由于该路由器没有为我们提供任何调试接口,我们无法确定特定数据包是否到达了 NAT。
因此,我们要设置一台 LINUX 计算机,使其成为具有对称 NAT 的路由器,这样我们就可以将所有数据包捕获到这个“NAT”并获得我们想要的信息。我们如何在 linux(Fedora 系统,内核 2.6.xx)上执行此操作?
我有三台机器:一台本地 PC(公共 IP 1.2.3.4)、数据中心中的 Ubuntu 10 服务器盒(5.6.7.8 公共 IP 上的 eth0),以及托管我网络外部网站的第三方服务器(假设216.34.181.45 上的斜杠)。
我知道足够的网络是危险的。NAT 的底层细节并不是我特别了解的。
今天早些时候,我无意中发现自己参与了关于将一堆节点置于 NAT 网关后面的讨论。(1 个公共 IP 地址和 X 个私有 LAN 地址)。我调用了 TCP 协议中源和目标端口字段的 16 位限制(http://www.ietf.org/rfc/rfc793.txt - 第 15 页)并提到它会将我们限制为大约 65,000 个连接( 65536)。——我对那个答案不再那么有信心了。你能帮我提供一些细节吗?
我知道我们这边的传入端口(服务器端口)可以接受与 sourceIP x SourcePort 组合一样多的连接。让我们暂时忽略这些,重点关注源自 LAN、通过 NAT 网关并在随机端口的随机主机上结束的连接。
在普通的 [Linux] 系统上,我认为每个源 IP 的每个端口只能有 1 个传出连接。如果我们假设我们生活在一个简单的世界中,其中每个系统只有 1 个 IP 地址,那么“正常系统”将被限制为绝对最大 65536 个连接。
1) 在 TCP 中是单源 IP 限制为 65536 MAX 理论传出连接?
2) 还是每个远程主机的限制实际上是 65536 个连接?
2) [Written another way]:同一个源端口可以用于不同的remoteHostIP:RemotePort组合吗?
例如:(以下可以吗?)
Source IP |Source Port |Remote IP|Remote Port
192.168.0.20:36500 --> 8.8.8.8:23
192.168.0.20:36500 --> 8.8.4.4:23
Run Code Online (Sandbox Code Playgroud)
3) 问题 1 …
我在 PC 和网络之间安装了带 NAT 的网关。PC 用户可以通过 Lync 客户端聊天,但不能呼叫或加入会议。Lync 客户端应通过 NAT 映射哪些端口以使用所有 Lync 设施?更新:问题实际上是关于Lync 客户端的NAT 端口映射。
我知道 NAT 表。我只想知道如果私有局域网中的两个客户端想要在同一个端口上下载完全相同的资源会发生什么?换句话说,当一个数据包来自服务器时,路由器如何决定哪个客户端应该得到这个数据包?
如果我没记错的话,来自服务器的传入数据包具有路由器的目标 IP 地址,该地址是公共的并且两者都相同,并且目标的端口号在这种情况下也恰好相同。
路由器或服务器中是否有任何机制可以检测到这一点?或者这种行为一开始是可能的吗?
我搜索这样的问题这样,这是有道理的,错误加薪,因为端口忙,但我问两个独立的系统。
更新:从评论中我意识到我不够清楚,所以让我用一个例子再说一遍:
我只关心设备的“源”端口。假设我有两台笔记本电脑(192.168.2.10和192.168.2.11),它们都从互联网上的同一台服务器下载相同的文件。它们每个都有一个操作系统,它生成一个随机端口,因此源 IP 和源端口将类似于:192.168.2.10:6321和192.168.2.11:7132。我认为在 NAT 中,路由器会设置它的(公共)IP 地址以及来自笔记本电脑的端口,所以如果家用路由器的公共 IP 地址是65.82.23.32,这两个包将分别获得这些源 IP 和源端口 :65.82.23.32:6321和65.82.23.32:7132。
现在,当响应返回时,路由器可以从端口号中找出哪个数据包用于哪个笔记本电脑,对吗?到目前为止,一切都很好。但是,如果两台笔记本电脑意外或有意地生成完全相同的源端口,会发生什么情况?例如:192.168.2.10:6000和192.168.2.11:6000。现在路由器会像以前一样将它的公共 IP 地址设置为源 IP 地址,但是现在如果它尝试使用这些端口号,这些包将具有完全相同的源 IP 和源端口号,例如 :65.82.23.32:6000和65.82.23.32:6000。
这就是我感到困惑的地方,当响应回来时,路由器如何决定哪个数据包用于哪个笔记本电脑?
在@mfinni 的回答之后,我注意到这不是 PAT 的工作方式!NAT 设备(此处为路由器)将为每台笔记本电脑分配唯一端口(私有 IP 地址),然后使用这些唯一端口(例如7777和7778)发送数据包。因此,当反应回来,很显然,这包是针对笔记本电脑从端口,那么路由器将这些转换65.82.23.32:7777,65.82.23.32:7778到- > 192.168.2.10:6000,192.168.2.11:6000分别。