linux – DNAT到127.0.0.1,带有用于透明SOCKS代理的iptables /目标访问控制

我有一台在我的本地网络上运行的服务器,它充当我网络中计算机的路由器.我现在想要实现对某些IP地址的传出TCP请求通过SSH连接进行隧道传输,而不会让我的网络中的人员使用该SSH隧道连接到任意主机.

到目前为止我想到的方法是让一个实例redsocks监听localhost并将所有传出请求重定向到我想转移到该redsocks实例的IP地址.我添加了以下iptables规则:

iptables -t nat -A PREROUTING -p tcp -d 1.2.3.4 -j DNAT --to-destination 127.0.0.1:12345

显然,Linux内核将来自非127.0.0.0 / 8地址的数据包视为“Martian数据包”并将其丢弃为127.0.0.0/8地址.然而,有效的方法是让redsocks监听eth0而不是lo,然后让iptables将数据包转换为eth0地址(或使用REDIRECT规则).这个问题是我的网络上的每台计算机都可以使用redsocks实例连接到互联网上的每个主机,但我想将其使用限制在一组特定的IP地址.

有没有办法让iptables DNAT包到127.0.0.1?否则,有没有人知道如何在不向所有人开放隧道的情况下实现我的目标?

更新:我还尝试更改数据包的来源,但没有成功:

iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 1.2.3.4 -j SNAT --to-source 127.0.0.1
iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 127.0.0.1 -j SNAT --to-source 127.0.0.1

解决方法

您无法使用127/8网络执行此操作,因为它在Linux内核中特别处理.但您可以创建虚拟网络接口,为其分配IP地址,将您的服务绑定到此地址并执行NAT.
root@vm8583:~# ip link add bogus type dummy
root@vm8583:~# sysctl net.ipv4.conf.eth0.arp_ignore=3
root@vm8583:~# ip addr add 10.0.0.1/32 bogus scope host
root@vm8583:~# ip link set bogus up
root@vm8583:~# ip link show bogus
4: bogus: <broADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNowN mode DEFAULT 
    link/ether 5e:8b:38:f3:46:ce brd ff:ff:ff:ff:ff:ff

注意,您可能需要设置net.ipv4.conf.eth0.arp_ignore = 3以便您的server won’t answer to ARP requests for 10.0.0.1 incoming via eth0

arp_ignore - INTEGER
    Define different modes for sending replies in response to
    received ARP requests that resolve local target IP addresses:
. . .
    3 - do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied
    4-7 - reserved

相关文章

1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...
如何抑制stable_secret读取关键的“net.ipv6.conf.all.stabl...
1 删除0字节文件 find -type f -size 0 -exec rm -rf {} ...
## 步骤 1:安装必要的软件包 首先,需要确保系统已安装 `dh...