• Stars
    star
    680
  • Rank 66,440 (Top 2 %)
  • Language
    Rust
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

nftables nat rule generator——nftables nat规则生成器

基于nftables的端口转发管理工具

用途:便捷地设置nat流量转发

适用于centos8及以后的redhat系发行版和支持nftables的debian系linux发行版如debian10

优势

  1. 实现动态nat:自动探测配置文件和目标域名IP的变化,除变更配置外无需任何手工介入
  2. 支持IP和域名
  3. 支持单独转发tcp或udp
  4. 支持转发到本机其他端口(nat重定向)【2023.1.17更新】
  5. 以配置文件保存转发规则,可备份或迁移到其他机器
  6. 自动探测本机ip
  7. 支持自定义本机ip【2023.1.17更新】
  8. 开机自启动
  9. 支持端口段
  10. 轻量,只依赖rust标准库

准备工作

  1. 关闭firewalld
  2. 关闭selinux
  3. 开启内核端口转发
  4. 安装nftables(一般情况下,centos8默认包含nftables)

以下一键完成:

# 关闭firewalld
service firewalld stop
systemctl disable firewalld
# 关闭selinux
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  
# 修改内存参数,开启端口转发
echo 1 > /proc/sys/net/ipv4/ip_forward
sed -i '/^net.ipv4.ip_forward=0/'d /etc/sysctl.conf
sed -n '/^net.ipv4.ip_forward=1/'p /etc/sysctl.conf | grep -q "net.ipv4.ip_forward=1"
if [ $? -ne 0 ]; then
    echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p
fi
# 确保nftables已安装
yum install -y  nftables

debian系说明 请自行使用apt安装nftables,并禁用iptables

使用说明

# 必须是root用户
# sudo su

systemctl stop nat
# 下载可执行文件
wget -O /usr/local/bin/nat http://cdn.arloor.com/tool/dnat
chmod +x /usr/local/bin/nat

# 创建systemd服务
cat > /lib/systemd/system/nat.service <<EOF
[Unit]
Description=dnat-service
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory=/opt/nat
EnvironmentFile=/opt/nat/env
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

mkdir /opt/nat
touch /opt/nat/env
# echo "nat_local_ip=10.10.10.10" > /opt/nat/env #自定义本机ip,用于多网卡的机器

# 生成配置文件,配置文件可按需求修改(请看下文)
cat > /etc/nat.conf <<EOF
SINGLE,49999,59999,baidu.com
RANGE,50000,50010,baidu.com
EOF

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
  • 请确保配置文件符合格式要求,否则程序可能会出现不可预期的错误,包括但不限于你和你的服务器炸掉(认真

高级用法:

  1. 转发到本地:行尾域名处填写localhost即可,例如SINGLE,2222,22,localhost,表示本机的2222端口重定向到本机的22端口。
  2. 仅转发tcp/udp流量:行尾增加tcp/udp即可,例如SINGLE,10000,443,baidu.com,tcp表示仅转发tcp流量,SINGLE,10000,443,baidu.com,udp仅转发udp流量

如需修改转发规则,请vim /etc/nat.conf以设定你想要的转发规则。修改完毕后,无需重新启动vps或服务,程序将会自动在最多一分钟内更新nat转发规则(PS:受dns缓存影响,可能会超过一分钟)

一些需要注意的东西

  1. 本工具在centos8、redhat8、fedora31上有效,其他发行版未作测试
  2. 与前作arloor/iptablesUtils不兼容,在两个工具之间切换时,请重装系统以确保系统纯净!

如何停止以及卸载

## 停止定时监听域名解析地任务
service nat stop
## 清空nat规则
nft add table ip nat
nft delete table ip nat
## 禁止开机启动
systemctl disable nat

致谢

  1. 解决会清空防火墙的问题
  2. ubuntu18.04适配

常问问题

关于trojan转发

总是有人说,不能转发trojan,这么说的人大部分是证书配置不对。最简单的解决方案是:客户端选择不验证证书。复杂一点是自己把证书和中转机的域名搭配好。

小白记住一句话就好:客户端不验证证书。

用于多网卡的机器时,如何指定用于转发的本机ip

可以执行以下脚本来自定义本机ip,该示例是将本机ip定义为10.10.10.10

echo "nat_local_ip=10.10.10.10" > /opt/nat/env

如何查看最终的nftables规则

nft list ruleset

查看日志

执行

cat /opt/nat/log/nat.log

或执行

journalctl -exu nat

联系

Telegram

赏个鸡腿吧

More Repositories

1

iptablesUtils

iptables转发ddns域名
Shell
1,414
star
2

HttpProxy

http代理,支持CONNECT和普通GET/POST,支持http2;可防止主动嗅探;可作为小火箭、圈、surge等软件和SwitchyOmega(chrome插件)所说的https代理
Java
271
star
3

sogo

http流量伪装的socks5代理
Go
46
star
4

socks5

试用http进行流量伪装的socks5代理
Java
33
star
5

rust_http_proxy

基于Rust的正向代理、反向代理和静态资源托管。 forward proxy、reverse proxy and static file serving
Rust
25
star
6

telegram-client

电报java客户端
Java
24
star
7

connect

配合HttpProxy使用,在本机启动http和socks5代理
Java
13
star
8

proxyme

基于java NIO的http代理,支持https
Java
12
star
9

sogo-server

http流量伪装的socks5代理(服务端)
Go
7
star
10

es-score-plugin

elasticsearch 评分插件
Java
7
star
11

trojan

trojan服务端java实现
Java
7
star
12

tdlib-use

Telegram java客户端
6
star
13

nywc

微信小程序——南雍记 springboot2.0+mybaits项目
Java
6
star
14

EasySpider

A spider framework powered by groovy
Java
5
star
15

proxygo

go语言编写的windows翻墙客户端,需配合HttpProxy项目下的proxyserver使用
Go
5
star
16

emarket

6天写成的微信小程序商城
Java
4
star
17

TelegramBot

电报禁言机器人
Go
2
star
18

forward

HttpProxy的客户端
Go
2
star
19

relay

rust 中转
Rust
1
star
20

libuv_test

HTML
1
star
21

arloor

1
star
22

ForkJoinPoolDemo

Java
1
star
23

go-actions

golang的避坑记录
Go
1
star
24

arloor.github.io

SCSS
1
star
25

seedrs

股权众筹平台seedrs的所有众筹项目
CSS
1
star
26

intel_cpu_temperature

操作MSR寄存器,实现对CPU温度、功耗的读取、控制
C
1
star
27

development-master-samples-ToyVpn1

Java
1
star
28

service4tensorflow

tensoflow微服务
Java
1
star
29

ddns

自动识别ip变更,并更新dnspod的域名解析
Rust
1
star
30

moontell_jizhang

记账本小程序
JavaScript
1
star
31

sogo-client-netty

sogo-client netty移植版(更优雅实现
Java
1
star