DHCP Relay: freeradius + dhcrelay, версия 2

В прошлой статье был приведен патч для установки адреса relay agent. В нем есть одно ограничение — один relay. Часто требуется множество агентов. Патч теперь другой:

--- freeradius-server-2.2.0/src/main/dhcpd.c.orig       2012-09-10 14:51:34.000000000 +0300
+++ freeradius-server-2.2.0/src/main/dhcpd.c    2013-04-26 08:30:14.483740654 +0300
@@ -267,6 +267,7 @@
        int rcode;
        unsigned int i;
        VALUE_PAIR *vp;
+       VALUE_PAIR *vp1;
        dhcp_socket_t *sock;

        vp = pairfind(request->packet->vps, DHCP2ATTR(53)); /* DHCP-Message-Type */
@@ -397,6 +398,11 @@
        vp = pairfind(request->reply->vps, DHCP2ATTR(266)); /* DHCP-Gateway-IP-Address */
        if (vp && (vp->vp_ipaddr != htonl(INADDR_ANY))) {
                /* Answer to client's nearest DHCP relay */
+               vp1=pairfind(request->reply->vps, DHCP2ATTR(270));
+               /*ATTRIBUTE     DHCP-Relay-To-IP-Address        270     ipaddr*/
+               if(vp1){
+                   vp = vp1;
+               }
                request->reply->dst_ipaddr.ipaddr.ip4addr.s_addr = vp->vp_ipaddr;
        } else if ((request->reply->code == PW_DHCP_NAK) ||
            ((vp = pairfind(request->reply->vps, DHCP2ATTR(262))) /* DHCP-Flags */ &&


И в настройках сервера:

        update reply {
            DHCP-DHCP-Server-Identifier = "%{DHCP-Gateway-IP-Address}"
            DHCP-Gateway-IP-Address = "%{DHCP-Gateway-IP-Address}"
            DHCP-Relay-To-IP-Address = "%{Packet-Src-IP-Address}"
        }


 

Теги: ,

Ваш отзыв