介绍
可用于端口转发的工具之前有介绍过haproxy,实际上还有其他方便的工具如iptables等。haproxy只支持tcp转发,另外对于转发动态域名+端口有点问题,所以这次试试nftables看是否会更好。
下面配置说明文档转自https://github.com/arloor/nftables-nat-rust
准备工作
关闭firewalld
关闭selinux
开启内核端口转发
安装nftables(一般情况下,centos8默认包含nftables)
以下一键完成:
service firewalld stop systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config sed -n '/^net.ipv4.ip_forward=1/'p /etc/sysctl.conf | grep -q "net.ipv4.ip_forward=1" echo 1 > /proc/sys/net/ipv4/ip_forward if [ $? -ne 0 ]; then echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p fi yum install -y nftables
debian系说明 请自行使用apt安装nftables,并禁用iptables
使用说明
# 必须是root用户 # sudo su # 下载可执行文件 wget -O /usr/local/bin/nat http://cdn.arloor.com/tool/dnat chmod +x /usr/local/bin/nat # 生成配置文件,配置文件可按需求修改(请看下文) cat > /etc/nat.conf <<EOF SINGLE,49999,59999,baidu.com RANGE,50000,50010,baidu.com EOF # 创建systemd服务 cat > /lib/systemd/system/nat.service <<EOF [Unit] Description=动态设置nat规则 After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/nat /etc/nat.conf LimitNOFILE=100000 Restart=always RestartSec=60 [Install] WantedBy=multi-user.target EOF # 设置开机启动,并启动该服务 systemctl daemon-reload systemctl enable nat systemctl start nat 配置文件内容说明 /etc/nat.conf如下: SINGLE,49999,59999,baidu.com RANGE,50000,50010,baidu.com
每行代表一个规则;行内以英文逗号分隔为4段内容
SINGLE:单端口转发:本机49999端口转发到baidu.com:59999
RANGE:范围端口转发:本机50000-50010转发到baidu.com:50000-50010
请确保配置文件符合格式要求,否则程序可能会出现不可预期的错误,包括但不限于你和你的服务器炸掉(认真
如需修改转发规则,请nano /etc/nat.conf以设定你想要的转发规则。
修改完毕后,无需重新启动vps或服务,程序将会自动在最多一分钟内更新nat转发规则(PS:受dns缓存影响,可能会超过一分钟)