IP 转发、伪装、NAT

IP 转发、伪装、NAT

我的目标上有一个物理接口eth0,运行 Linux。该接口的IP地址为172.16.81。X(公共IP)。

我必须创建一个eth0:1IP 地址为 173.1.1 的虚拟接口。X。我将使用 IP 地址 173.1.1 运行带有自定义端口 49155 的套接字服务器。X

从另一台 PC/目标我应该无法 ping 通 173.1.1。X。但是,我将在另一台 PC 上运行套接字客户端程序。该客户端应该能够连接到 172.16.81 上的端口 49155。X公共IP。

我尝试过NAT、桥接,但没有成功。

使用以下 iptable 规则,能够建立服务器 <--> 客户端通信:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -A FORWARD -i ens33 -o 173.1.1.6 -p tcp --syn --dport 49155 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i ens33 -o 173.1.1.6 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i ens33 -o 173.1.1.6 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 49155 -j DNAT --to-destination 173.1.1.6
sudo iptables -t nat -A POSTROUTING -o ens33 -p tcp --dport 49155 -d 173.1.1.6 -j SNAT --to-source 192.168.233.251
sudo iptables -A INPUT -m tcp -p tcp -s 192.168.233.251 --dport 49155 -j ACCEPT

此时仍然可以从外部 PC ping 通 173.1.1.6。

但是我还必须使 173.1.1.6 对外部世界不可见,因为我添加了以下规则:

sudo iptables -A INPUT -d 173.1.1.6 -j DROP
sudo iptables -A OUTPUT -s 173.1.1.6 -j DROP
sudo iptables -A FORWARD -s 173.1.1.6 -j DROP

此 ping 被阻止后。服务器 <--> 客户端通信也不会发生。

答案1

虽然我不知道您实际上想要建立或最终实现什么,但考虑到以下情况:

  1. 您在同一主机上配置了两个 IP 地址(无论它们是否配置在同一网络接口上)

  2. 您有一些服务器程序绑定到其中一个地址

  3. 您不希望其他主机能够通过上述程序绑定的地址访问该主机(无论它们是否尝试连接到该程序/端口)。

  4. 您希望其他主机能够使用未绑定的其他地址连接到上述程序。

无论上述内容在任何情况下是否有意义,您都可以使用以下 iptables 规则来实现:

(假设它的 IP 地址为192.168.1.2192.168.2.2,并且服务器程序绑定到192.168.2.2:80,我希望其他主机能够通过 来连接到它192.168.1.2:8080

iptables -t raw -I PREROUTING -d 192.168.2.2 -j DROP
iptables -t nat -I PREROUTING -d 192.168.1.2 -p tcp --dport 8080 -j DNAT --to-destination 192.168.2.2:80

(注意:这些规则适用于主机本身,而不是其网关等;由于您包含了FORWARD我无法理解的规则,所以我不知道您在做什么或在哪里做什么)

这里的关键是使用raw (PREROUTING)而不是filter (INPUT)丢弃不需要的流量,就像filter (INPUT)与后面的匹配一样nat (PREROUTING)

您可能不想将入站接口匹配 ( -i) 添加到第一条规则,因为您显然希望该地址完全“不可见”。 (好吧,也许你想要类似! -i......再次,我不知道你真正想要做什么,所以。)对于第二个,这取决于你希望 DNAT 在什么情况下发生。

作为记录,我不认为你有任何理由为此目的使用公共IP(尽管公平地说,即使你使用私有IP,你也需要选择一个不与私有子网冲突的IP)该主机需要到达的位置)。

PS 据我所知,你所说的“虚拟接口”只不过是一种在一个网络接口上配置多个IP地址的古老方法。

相关内容