什么是端口转发?为什么要转发?
准确来讲叫流量转发,因为流量是基于端口的,所以一般称为端口转发。
比如电信到伯力很差,我买了个上海联通鸡做转发,那么就是
电信->联通:1200->伯力:4900,那么我访问联通的1200端口,等于访问伯力的4900端口
转发还可以用于公网 frp,反代网站等用途
用什么转发?
推荐 iptables 或者 firewalld,都是内核级别的转发,性能损耗极少。
如果用 gost/brook 等第三方工具转发,流量大或者连接数过多的时候 cpu 和负载压力变大,对于 nat 小鸡特别不友好。
基于 firewalld 转发(适用于 centos7)
如果 Debian 也能装 firewalld,只要能装上并正常工作,也是能用它进行转发的。
以下命令都在 中转机 执行
先停止iptables
systemctl stop iptables
systemctl disable iptables
安装,开机启动
yum install firewalld
systemctl start firewalld
systemctl enable firewalld.service
状态:显示绿色 active 说明服务运行正常
systemctl status firewalld
开启内核转发,然后重启
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -p
reboot
到这里安装完成,
然后直接编辑 vim /etc/firewalld/zones/public.xml
文件,这个是 firewalld 配置文件
把下面的配置粘贴进去:
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<port protocol="tcp" port="10-65000"/>
<port protocol="udp" port="10-65000"/>
<masquerade/>
<forward-port to-addr="远程ip" to-port="远程端口" protocol="tcp" port="本地端口"/>
<forward-port to-addr="远程ip" to-port="远程端口" protocol="udp" port="本地端口"/>
</zone>
重启防火墙就生效了
systemctl restart firewalld.service
每次修改 public.xml 要重启防火墙才会生效
基于 iptables 转发(适用于centos7,debian8+)
先安装 iptables
# Centos
yum install -y iptables
yum install -y iptables-services
# Debian、Ubuntu
apt-get install -y iptables
apt-get install -y iptables-services
设置开机启动
systemctl start iptables
systemctl enable iptables
查看服务状态,显示 绿色 active 就可以了
service iptables status
清空所有防火墙规则,避免因端口没开造成影响
iptables -F
iptables -X
开启内核转发,重启
echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
reboot
到这里安装完成,接下来就是添加转发规则,可以自己添加,也可以使用脚本。
自己直接添加
iptables -t nat -A PREROUTING -p tcp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
iptables -t nat -A PREROUTING -p udp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
借助脚本
这个脚本是帮你一键执行 iptables 命令,还是 调用 iptables,非第三方转发软件,支持ddns
感谢7MU https://github.com/cimmu/script
wget --no-check-certificate -qO natcfg.sh https://github.com/cimmu/script/raw/main/natcfg.sh && bash natcfg.sh
评论 (0)