iptables 实现(中继/中转/端口转发)加速

时间:2022-06-24 10:18:36

iptables 实现(中继、中转、端口转发)加速

2019年03月04日
Server IP:172.16.10.10/24
系统版本:CentOS Linux release 7.5.1804

参考文档

https://lighti.me/2540.html


1. 适用场景

经常会遇到本地访问远端服务时速度很慢。比如:ssh 或者 remotedesktop 国外的服务器、使用SS***时速度慢延迟高 等等
这时可以用一台机器做跳板,来转发你的数据
前提是这台机器 到你本地网络 和 到达远端服务器网络 状态良好。
举例:你在北京远程桌面美国的一台服务器延迟高经常掉线,而香港的vps到北京和美国的网络都很快,此时你就可以选择香港的vps来做中转。
iptables 可以简单快速的实现这一功能。

2. 开启ipv4路由转发

Linux的防火墙功能是通过netfilter实现的,iptables和firewalld则是netfileter的管理工具
这里使用iptables来实现中转功能

首先要启用 linux 的 ipv4 路由转发功能

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p

3. 安装并启用iptables

# yum install -y iptables iptables-services
# systemctl enable iptables
# systemctl restart iptables

4. 编写iptables规则

假设:HK-vps IP 1.1.1.1,US-vps IP 2.2.2.2,服务端口 TCP-3389

# iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 2.2.2.2:3389
# iptables -t nat -A POSTROUTING -p tcp -d 2.2.2.2 --dport 3389 -j SNAT --to-source 1.1.1.1

但实际上大多数vps只会配置一个内网地址,然后再和你的公网地址一对一映射
比如 HK-vps 上 ifconfig 得到 IP 172.16.10.10
所以实际你应该这样写

# iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 2.2.2.2:3389
# iptables -t nat -A POSTROUTING -p tcp -d 2.2.2.2 --dport 3389 -j SNAT --to-source IP 172.16.10.10

然后当你需要连接 US-vps 的 tcp-3389时

# telnet 2.2.2.2 3389

当然你也可以不必让中转端口和实际目的端口号一样
比如当你 telnet 1.1.1.1 666 实际连接的是 2.2.2.2 3389

# iptables -t nat -A PREROUTING -p tcp --dport 666 -j DNAT --to-destination 2.2.2.2:3389
# iptables -t nat -A POSTROUTING -p tcp -d 2.2.2.2 --dport 3389 -j SNAT --to-source IP 172.16.10.10

iptables规则写完后,若验证失败,检查iptables是否启动,或者查看vps安全策略是否放行匹配流量。

5. 保存iptables配置

# service iptables save