能用 iptables 把流量转发到另一台机器的某个端口吗?
- 0次
- 2021-06-15 12:20:35
- idczone
是这样,主路由是个 openwrt,IP 192.168.1.1,另外一台机器 192.168.1.2 上开了个 dokodemo-door,端口是 12345 。
现在想让路由器把流量都转发到 192.168.1.2:12345 上。参考网上透明代理的 iptables 规则,好像都是转发给本地端口,我尝试过转发给另外的机器,不成功。
我不想把网关改到 192.168.1.2 上,不知道能不能做这样的转发?
iptables 能做端口转发。我曾经用这个转发梯子流量实现加速,但是我忘记怎么写了。
楼下请:
下面是我用 iptables 做的 SNAT
-A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 192.168.0.150
具体也可以百度一下 SNAT 的配置
我猜 !说的是这个
sudo su
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 8388 -j DNAT --to-destination US_VPS_IP:8388
iptables -t nat -A POSTROUTING -p tcp -d US_VPS_IP --dport 8388 -j SNAT --to-source JAPAN_VPS_IP
https://github.com/shadowsocks/shadowsocks/wiki/Setup-a-Shadowsocks-relay
用 SSH Tunneling 也行
你这样转发,就得考虑流量回环问题。
给你另一个方案
192.168.1.2:做透明代理,再多做一步,加个 dns 服务器
192.168.1.1:openwrt 的主路由,把 dns 服务器和网关设置为 192.168.1.2
以上完美解决,不用转发啊,我家现在就是这么搞的,相当于 192.168.1.2 是网关。
dnsmasq-full 配合 ipset 可以实现墙内外分流,墙外的走透明网关,墙内的直接走路由器出去。
感觉 SNAT 貌似可行,晚上试一下,谢谢。
你是在 DHCP 下发的时候,给其他电脑设置这个 dns 服务器和网关吗?
转发脚本内容 tcpproxy.sh
----------
/>TCP Proxy using IPTables
echo 1 > /proc/sys/net/ipv4/ip_forward
Flush nat table
iptables -t nat -F
tcpproxy LOCAL_IP LOCAL_PORT REMOTE_IP REMOTE_PORT
function tcpproxy {
iptables -t nat -A PREROUTING --dst $1 -p tcp --dport $2 -j DNAT --to-destination $3:$4
iptables -t nat -A POSTROUTING --dst $3 -p tcp --dport $4 -j SNAT --to-source $1
iptables -t nat -A OUTPUT --dst $1 -p tcp --dport $2 -j DNAT --to-destination $3:$4
}
------------
使用方法
tcpproxy.sh 192.168.1.1 12345 192.168.1.2 12345
不行,我试过了。跨机器透明代理流量转发会导致原目的地址丢失
只能更改 dhcp 分配的网关
10 楼+1,目前 iptables 做不到,nftable 记得有能做到的设计,但是还没实现。
不是,其它电脑自动获取 ip 时,网关和 dns 就是透明网关的地址。
iptables 和 iproute 搭配可以实现。看 https://tldp.org/HOWTO/TransparentProxy-6.html 这里的第 2 种方法。
这种方法不用修改网关,原理是把去往 12345 端口的流量打上标记,然后设定 ip rule 使这些流量走另一个路由表到达运行代理的设备。
可解,iptables 打 mark,增加路由表改路由
但你全部流量都转发,和改网关又有什么区别呢
可以使用 haproxy,iptables 试了不稳定
用 HAProxy 吧,甚至 Nginx 的 stream 代理都行
有个简单的命令行工具
https://github.com/Ehco1996/ehco
推荐试试
SNAT+DNAT 可以。haproxy/nginx 也可以。不过会丢失原始的客户端 IP
如果要保留,可以尝试 LVS FullNAT 模式+toa 模块
在 openwrt 上装 dokodemo-door