我正在尝试将我的计算机配置为两个网络之间的网关,但由于某些原因我无法使其工作
以下是网络的表示:
192.168.1.101 192.168.1.102 192.168.1.103 ...
| | |
\------------+------+-------+--------...
|
192.168.1.200 (eth1)
PC
(192.168.2.101 192.168.2.102 192.168.2.103 ...)
eth0:1 eth0:2 eth0:3
| | |
\------------+------+-------+--------...
|
192.168.2.200 (eth0)
|
...
我的计算机在接口 192.168.2.200 (eth0) 上有 N 个虚拟接口 (eth0:*),每个接口都有自己的 IP 地址。我希望任何攻击 eth0:* 接口的连接 (主要是 TCP) 都转发到等效的 192.168.1.1** 服务器。
我尝试使用重新定位可执行文件,但是由于服务器使用随机端口号进行监听(无法更改这一点),因此每次进行测试时我都必须重新启动进程。
因此我使用了如下的 iptables 规则(仅针对一台服务器进行测试):
iptables -t nat -A PREROUTING -d 192.168.2.101 -j DNAT --to-destination 192.168.1.101
iptables -t nat -A POSTROUTING -d 192.168.1.101 -j SNAT --to-source 192.168.2.101
iptables -A FORWARD -i 192.168.2.101 -d 192.168.1.101 -j ACCEPT
但是任何到 192.168.2.101:80 的连接都会返回“连接被拒绝”,而任何到 192.168.1.101:80 的连接都会被接受。
然后我“玩”了 iptables 规则而没有重置规则,我成功连接到 192.168.2.101:80,这实际上是正确的服务器;但是当我尝试另一个连接(使用 TCP/6666 上的临时 Web 服务器)时,该连接像上面一样被拒绝。
您有一个完整的例子来使它工作吗?
注意:我删除了 iptables 中的每个条目来进行其他测试,因此我从头重新启动,而没有执行之前的操作...
@lain: 我启用了 IP 转发
$ cat /proc/sys/net/ipv4/ip_forward
1
答案1
iptables
有一个适合您的匹配:它被称为NETMAP
。
iptables -t nat -A PREROUTING -i eth0 --src 192.168.2.200/?? -j NETMAP --to 192.168.1.0/??
iptables -t nat -A PREROUTING -i eth1 --src 192.168.1.200/?? -j NETMAP --to 192.168.2.0/??
至于接口别名,请抛弃它们。接口别名不仅已被弃用(如果您使用ip addr
,您将看到内核将它们映射到其通过接口拥有多个地址的本机功能),而且在这里似乎有些矫枉过正,因为没有本地服务使用它们。
如果您希望此主机回答 eth0 中那些 IP 的 ARP 请求,请使用 ARP 代理功能或添加本地路由,告诉内核所有这些 IP 都是它自己的:
ip route add local 192.168.2.200/?? dev eth0