我有 2 台服务器,我需要转发到内部端口。
为了解释,我使用具有 2 个接口(内部/外部)的服务器作为服务器 A,将内部服务器用作服务器 B。
在服务器 A 中我使用
iptables -A PREROUTING -t nat -i $extif -p tcp --dport $extif_port -j DNAT --to-destination $dst_ip:$dst_port"
iptables -A FORWARD -t filter -d $dst_ip -j ACCEPT"
iptables -A POSTROUTING -t nat -p tcp -s $dst_ip --sport $dst_port -j SNAT --to-source $extif_ip"
在服务器 BI 中使用 fwmark 并使用 fwmark 和 iproute2 路由到服务器 A:
ip rule $command fwmark 1 lookup 1
ip route $command default via $rt_ip table 1
--
iptables -A PREROUTING -t mangle -p tcp -i $intif ! -s $intif_net --dport $port -j MARK --set-mark 1
iptables -A PREROUTING -t mangle -p tcp -i $intif -s $intif_ip --sport $port -j MARK --set-mark 1
iptables -A POSTROUTING -t mangle -p tcp -o $intif -s $intif_ip --sport $port -j MARK --set-mark 1
在服务器 B 中使用上面的三个规则,连接只停留在 SYN_RECV 状态,并且在日志中没有在连接中发送 ACK,在某些部分内部数据包丢失,但我不知道为什么。
欢迎任何帮助,祝你有美好的一天。