Linux Note / 运维笔记

如何设置服务器中转 – 利用 iptables/firewalld

Einic Yeo · 3月21日 · 2019年 · · · ·

一、定义

版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作! 中转,顾名思义,就是用一台优质中转服务器中转目的服务器,优化用户端到目的服务器的链路,形成 用户 → 国内中转服务器 → 目的地服务器 的网路链路,简单来说就是通过中转服务器优化用户端到目的服务器的路由。

二、意义

某些运营商,比如长城宽带、鹏博士宽带这种二级运营商,自己没有出口带宽,靠租上级运营商的带宽过活,人一多就拥挤。即便是电信、联通、移动这三大运营商,民用级的国际出口带宽在高峰时也如同万人挤独木桥,非常拥堵,导致大家平常玩游戏时经常遇到高延迟、高丢包的现象。相对的,BGP 线路就会宽松很多,利用中转,用户端可以直接从国内走企业级国际出口,相当于出国的 VIP 绿色通道,避免和别人争那个本来就不多的民用出口,大大降低延迟和丢包。

三、设置

主要是中转服务器的设置,系统不一样步骤可能不同,这里以 Ubuntu 16.04 为例,大家可以根据自己的系统相应修改。

中转效果受中转服务器的质量影响,比如中转服务器带宽为 1Mbps,那么中转之后版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!,用户端到目的服务器的最高速度也不会超过 1Mbps,因此 尽量找一台质量好的中转版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!服务器

1、开启转发功能

$ sudo vim /etc/sysctl.conf

删除 net.ipv4.ip_forward=1 前的注释符号 #,如果支持 IPv6,则应一并删除 net.ipv6版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!.conf.all.forwarding=1 前的注释符号 #,修改后大致如下:

......
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
net.ipv6.conf.all.forwarding=1
......

运行命令使其生效:

$ sudo sysctl -p

2、设置 iptables 转发

$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport [本地端口] -j DNAT --to-destination [目的IP]:[目的端口]
$ sudo iptables -t nat -A PREROUTING -p udp -m udp --dport [本地端口] -j DNAT --to-destination [目的IP]:[目的端口]
$ sudo iptables -t nat -A POSTROUTING -p tcp -m tcp -d [目的IP] --dport [目的端口] -j SNAT --to-source [本地IP]
$ sudo iptables -t nat -A POSTROUTING -p udp -m udp -d [目的IP] --dport [目的端口] -j SNAT --to-source [本地IP]
$ sudo iptables-save > /etc/iptables.up.rules

注意点:
① 本地IP:如果有私网,则应填私网 版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!IP,否则直接填公网 IP;
② 本地端口:中转服务器的端口;

3、验证

将服务器 IP 及端口修改成中转服务器的 IP 及端口,其他参数不变。

4、扩展一:查看及删除

① 查看已设置的 NAT 规则:

$ sudo iptables -t nat -vnL POSTROUTING --line-number 
$ sudo iptables -t nat -vnL PREROUTING --line-number 

② 删除 NAT 规则中 POSTROUTING 的第一条规则:

$ sudo iptables -t nat -D POSTROUTING 1

③ 清空 NAT 规则中 POSTROUTING 所有规则:

$ sudo iptables -t nat -F POSTROUTING

④ 将本地服务器的 50000~65535 转发至目标 IP 为 1.1.1.1 的 50000~65535 端口:

$ sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
$ sudo iptables -t nat -A POSTROUTING -d 1.1.1.1/32 -p tcp -m tcp --dport 50000:65535 -j SNAT --to-source [本地IP]

5、扩展二:CentOS7 利用 firewalld 中转

CentOS7 建议使用自带的 Firewall 设置中转(使用 iptables 重启可能会失效),首先同样启用转发:

# echo 1 > /proc/sys/net/ipv4/ip_forward

然后添加防火墙 firewalld 规则:

# firewall-cmd --permanent --add-port=2333/tcp
# firewall-cmd --permanent --add-port=2333/udp
# firewall-cmd --permanent --add-masquerade
# firewall-cmd --permanent --add-forward-port=port=2333:proto=tcp:toport=6666:toaddr=1.1.1.1
# firewall-cmd --permanent --add-forward-port=port=2333:proto=udp:toport=6666:toaddr=1.1.1.1
# firewall-cmd --reload

其中,2333 代表本地端口, 6666 表示目的端口, 1.1.1.1 表示目的 IP,如果目的 IP 或目的端口相同,则 toaddr 或 toport 可省略。

2 条回应
  1. hkingsec2019-3-22 · 14:48

    可有优质中间节点的推荐

    • 伊人2019-3-24 · 10:40

      NAT VPS
      https://www.cloudiplc.com/cart.php?gid=12
      1、九折终身优惠码:welcome

      2、价格使用优惠码后27元/月,600G双向流量,100M共享带宽

      3、注意这家是无退款

      4、购买时建议选择CentOS7系统,方便后面端口转发