使用 nginx 进行 Radius 负载均衡

Radius loadbalancing using nginx

我正在尝试使用 nginx 对 radius 流量进行负载平衡。对于我有两台服务器的场景 运行ning 海鸥半径 server/client.

现在我在中间放了一个raspberry-pi 运行ning nginx作为loadbalnacer。所以我的 seagull-redius 客户端调用 raspberry-pi 的开放端口,nginx 将它重定向到 seagull-redius 服务器。

我在 raspberry-pi 中的 nginx.conf

stream {
  upstream syslog_udp {
    server 123.456.789.1:1813;
  }
  server {
    listen 1800 udp;
    proxy_pass syslog_udp;
    proxy_responses 0;
  }
}

我使用 sudo nc -lk 1800 打开端口 1800 当我 运行 seagull-radius 客户端时,我在树莓派控制台上得到了一些乱码输出。但数据包不会重定向到海鸥服务器。

如何正确执行此操作? seagull-radius client/server 示例正常工作。

我已经找到了答案。在 nginx 配置和 seagull client/server 端都需要做一些修改以发送 UDP 数据包(Radius)。

第一个 Seagull 客户端应该有

<define entity="transport"
    name="trans-ip-v4"
    file="libtrans_ip.so"
    create_function="create_cipio_instance"
    delete_function="delete_cipio_instance"
    init-args="type=udp">
  </define>

  <define entity="channel"
    name="trans-ip-v4"
    protocol="radius-accounting-v1"
    transport="trans-ip-v4"
    open-args="mode=client;dest=123.456.789.50:1800;source=123.456.789.100">
  </define>

这里非常重要的部分是source=123.456.789.100,这是官方海鸥半径指南中缺少的。这是海鸥半径客户端服务器。

服务器端只需将 init-args="type=udptcp 更改为:

<define entity="transport"
    name="trans-ip-v4"
    file="libtrans_ip.so"
    create_function="create_cipio_instance"
    delete_function="delete_cipio_instance"
    init-args="type=udp">
  </define>

在 raspberry pi 端口应打开为 sudo nc -lku 1800,其 IP 地址 123.456.789.50

nginx.conf

stream{
    upstream radius_loadbalance{
        server 123.456.789.1:1813;
        server 123.456.789.2:1813;
    }

    server {
        listen 1800 udp;
        proxy_pass radius_loadbalance;
        proxy_responses 1;
        #error_log logs/radius_lb.log;
    }
}

我希望这对以后的人有所帮助。