iptables 實現(中繼、中轉、端口轉發)加速
2019年03月04日
Server IP:172.16.10.10/24
系統版本:CentOS Linux release 7.5.1804
參考文檔
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