Range-Kernel-Port-Datenweiterleitungsmodul

NGINX entwickelt sich zu Cloud Native weiter, alles in  OpenNJet 


Range- Port-Weiterleitungsmodul

1.1 Anforderungen

In vielen Fällen müssen Funktionen wie Traffic Hijacking und FTP-Proxy im passiven Modus die Weiterleitung des Traffic-Ports unterstützen. Beispielsweise ist es erforderlich, den gesamten Datenverkehr im Portbereich von 10000 bis 11000 an Port 12000 zu übertragen und dann alle Pakete auf Port 12000 zur weiteren Verarbeitung zu empfangen.

1.2 Abhängigkeiten

Die Implementierung dieser Funktion hängt von iptables ab. Bei der Installation über das RPM-Paket wird der Berechtigungsprozess automatisch als Root gestartet.

Wenn es von einem normalen Benutzer gestartet wird, müssen setuid-Berechtigungen für opennjet festgelegt werden.

setcap cap_setuid=eip /home/njet/sbin/njet

1.3 Anleitungsdesign

Syntax

Bereichstyp={tcp|udp} src_ports={port1:port2} dst_port={dst_port}

 

Wenn der Standard- iptables-Pfad /usr/sbin/iptables ist und der System- iptables- Pfad nicht dieser ist, müssen Sie den folgenden Befehl angeben und verwenden

Bereich iptables_path={iptables_path};

Standard

-

Kontext

Core,  unterstützt mehrere Konfigurationen

Parameterbeschreibung:

Parameter

Typ

Erforderlich

Standardwert

veranschaulichen

Typ

Zeichenfolge

NEIN

TCP

[tcp|udp] gibt an, ob es sich um TCP- oder UDP- Daten handelt. Der Standardwert ist TCP

src_ports

Zeichenfolge

Ja

-

 

Unterstützt einen einzelnen Port oder einen Portbereich . Das Format lautet wie folgt:

Portbereich (durch Doppelpunkt getrennt):      11000:12000

Ein Port : 11000

dst_port

int

Ja

-

Zielport

iptables_path

 

Zeichenfolge

NEIN

 

/usr/sbin/iptables

 

Dies hängt vom System ab. Beim Aufrufen des Systems zur Ausführung kann der Fehler „iptables nicht gefunden“ auftreten. Zu diesem Zeitpunkt müssen Sie den iptables-Pfad des entsprechenden Systems überprüfen und dann diesen Parameter festlegen.

 

Wenn mehrere Bereichsanweisungen konfiguriert sind, hat der zuletzt explizit angegebene iptables_path Vorrang.

Konfigurationsbeispiel (TCP als Beispiel):

  • Leiten Sie an den lokalen Portbereich 11000 bis 12000 gesendete Daten an Port 13000 weiter:

Bereichstyp=TCP src_ports=11000:12000 dst_port=13000

  • Der an den lokalen Computer gesendete Port ist 11000 und wird an Port 13000 weitergeleitet:

Bereichstyp=TCP src_ports=11000 dst_port=13000

  • Legen Sie den iptables-Pfad auf /usr/sbin/iptables fest

Bereich iptables_path=/usr/sbin/iptables;

1.4 Umsetzungsplan

Diese Funktion wird mit Hilfe von iptables-Regeln implementiert, die Parameter über den Range-Befehl analysieren und dann entsprechende iptables-Regeln für die Verteilung generieren.

Der Range-Befehl unterstützt die Konfiguration mehrerer Regeln

Wenn das Modul init ist, werden iptables-Regeln basierend auf den Regeln generiert.

Die Regeln werden gelöscht, wenn das Modul beendet wird.

Alle Regeln werden in der benutzerdefinierten iptables-Kette OPENNJET platziert

1.5 Test

1.5.1 Konfigurationsbeispiel

Konfigurieren Sie zwei Bereichsanweisungen in der njet.conf- Konfiguration

...

Load_module module/njt_range_module.so; #Bereichsmodul laden
...

Benutzer niemand;

Ereignisse {
    worker_connections 1024;
}
error_log logs/error_privilege.log info;



#Konfigurieren Sie zwei Bereichsanweisungen
range type=tcp src_ports=11000:12000 dst_port=13000;
range type=tcp src_ports=10000 dst_port=14000;

#Der Standardpfad ist /usr/sbin/iptables. Wenn der Systempfad inkonsistent ist, müssen Sie diesen Befehl aufrufen, um den Pfadbereich festzulegen
iptables_path=/usr/sbin/iptables;

http {
    access_log logs/access_privilege. log kombiniert;

    include mime.types;

    server {
      ...
    }

}


cluster_name helper;
node_name node1;

1.5.2 Testergebnisse

Bevor Sie OpenNJet starten

Iptables-Regeln des Abfragesystems:

Nach dem Start von OpenNJet

Fragen Sie die iptables-Regeln erneut ab und stellen Sie fest, dass zwei Regeln gelten.

Nach dem Neuladen wird neu gestartet

Führen Sie eine erneute Abfrage durch und stellen Sie fest, dass noch zwei Regeln vorhanden sind

Nach dem Stoppen von OpenNJet

Fragen Sie erneut ab und löschen Sie zwei Regeln.

2. Imperative API  zur dynamischen Konfiguration von Portweiterleitungsregeln

2.1 需求:

能够通过api接口查询全量的range 配置规则

能够通过api增加或者删除一条range配置规则

根据type、src_ports、dst_port三个字段来确定一条规则

2.2 配置

ctrl控制面配置:

...
 load_module modules/njt_http_range_api_module.so;   #load range api module
 ...
    server {
        listen       8081;
       
        location /range {
            dyn_range_api;      #
配置range api开关
        }
    }
...

2.3 动态API

查询:

GET  http://192.168.40.136:8081/range

{
  "ranges": [
    {
      "type": "tcp",
      "src_ports": "11000:12000",
      "dst_port": 10001
    },
    {
      "type": "tcp",
      "src_ports": "10000",
      "dst_port": 14000
    }
  ]
}

PUT  http://192.168.40.136:8081/range

#添加一条规则
{
    "action": "add",
    "type": "tcp",
    "src_ports": "11000:13000",
    "dst_port": 10001
}

#删除一条规则
{
    "action": "del",
    "type": "tcp",
    "src_ports": "11000:13000",
    "dst_port": 10001
}

 

参数

类型

必填

默认值

说明

action

string

-

[add|del]

type

string

-

[tcp|udp], 指明是tcp还是udp数据

src_ports

string

-

 

支持单端口或者端口范围,格式如下:

端口范围(冒号分隔):     11000:12000

一个端口:       11000

dst_port

int

-

目标端口

return:

{
    "code": 0,         #0
表示成功,   非0 表示失败
    "msg": "success"
}

错误码

code

msg

描述

 

0

success

成功

 

2

-

内存分配失败相关的一些错误信息

 

4

rule is not found

删除一个不存在的规则

 

4

rule has exist

添加一个已经存在的规则

 

4

其他错误

 

 

2.4 swagger访问

可以通过doc模块提供的swagger界面操作

http://192.168.40.136:8081/doc/swagger/

2.5 测试

通过swagger页面进行api测试

初始状态get 查询配置

查询iptables

通过swagger页面添加一个规则

再次 查询配置和iptables

reload后再次查询,动态添加的配置和iptables都存在刚才动态添加的配置

Stop OpenNJet后,iptables规则消失

OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。 邮件组 官网

B站崩了两次、腾讯“3.29”一级事故……盘点 2023 十大宕机事故“冥场面” Vue 3.4 “灌篮高手”发布 MySQL 5.7、魔趣、李跳跳……盘点 2023“停更”的(开源)项目和网站 回顾 30 年前的 IDE:只有 TUI、背景颜色亮瞎眼…… Vim 9.1 发布,谨献给 Bram Moolenaar Redis 之父“锐评” LLM 编程:全知全能 && Stupid “后开源”时代已来:许可证失效、无法为普罗大众服务 联通宽带突然限制上传速度,遭大量用户投诉 Windows 主管承诺改进:让开始菜单再次伟大 Pascal 之父 Niklaus Wirth 逝世
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/6606114/blog/10580912
Recomendado
Clasificación