แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ FreeRadius-แƒ“แƒแƒœ DHCP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—

แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ FreeRadius-แƒ“แƒแƒœ DHCP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—
แƒ“แƒแƒ“แƒ’แƒ แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ. แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ˜แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒ˜:

  • แƒฉแƒ•แƒ”แƒœ แƒแƒ  แƒ›แƒแƒ’แƒชแƒ”แƒ›แƒ— แƒชแƒแƒšแƒ™แƒ” แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก - แƒ—แƒฅแƒ•แƒ”แƒœ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ— ๐Ÿ˜‰
  • แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ›แƒ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒœ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ DHCP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—
  • แƒฅแƒกแƒ”แƒšแƒ˜ แƒฐแƒ”แƒขแƒ”แƒ แƒแƒ’แƒ”แƒœแƒฃแƒšแƒ˜แƒ. แƒ”แƒก แƒ›แƒแƒ˜แƒชแƒแƒ•แƒก PON แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒแƒก แƒ“แƒ แƒ แƒ”แƒ’แƒฃแƒšแƒแƒ แƒฃแƒš แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ”แƒ‘แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ 82 แƒ“แƒ WiFi แƒ‘แƒแƒ–แƒ”แƒ‘แƒ˜แƒ— แƒชแƒฎแƒ”แƒšแƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—
  • แƒ—แƒฃ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒแƒ  แƒ”แƒฅแƒ•แƒ”แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒ‘แƒ IP-แƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” แƒžแƒ˜แƒ แƒแƒ‘แƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒกแƒชแƒ”แƒ— IP "แƒกแƒขแƒฃแƒ›แƒแƒ แƒ˜" แƒฅแƒกแƒ”แƒšแƒ˜แƒ“แƒแƒœ.

แƒ™แƒแƒ แƒ’แƒ˜ แƒ›แƒฎแƒแƒ แƒ”: FreeBSD-แƒ–แƒ” แƒฏแƒ”แƒ  แƒ™แƒ˜แƒ“แƒ”แƒ• แƒแƒ แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ โ€žแƒ›แƒฃแƒจแƒแƒแƒ‘แƒโ€œ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒก โ€žแƒจแƒแƒ แƒกโ€œ ;), แƒแƒ แƒ โ€žแƒกแƒฌแƒแƒ แƒแƒ“ แƒแƒ› แƒฅแƒกแƒ”แƒšแƒจแƒ˜โ€œ.

แƒแƒกแƒ”แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ, แƒกแƒแƒฎแƒ”แƒšแƒแƒ“ Mikrotik. แƒกแƒแƒ”แƒ แƒ—แƒ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ“แƒ˜แƒแƒ’แƒ แƒแƒ›แƒ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒกแƒ”แƒ—แƒ˜แƒ:

แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ FreeRadius-แƒ“แƒแƒœ DHCP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—

แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒคแƒ˜แƒฅแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ’แƒแƒ“แƒแƒฌแƒงแƒ“แƒ FreeRadius-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒชแƒ”แƒ›แƒแƒ“. แƒžแƒ แƒ˜แƒœแƒชแƒ˜แƒžแƒจแƒ˜, แƒกแƒฅแƒ”แƒ›แƒ แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ•แƒ˜แƒ: แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒ— DHCP แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก Microtick-แƒ–แƒ” แƒ“แƒ Radius Client แƒ›แƒแƒกแƒ–แƒ”. แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒ— DHCP แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก -> Radius Client -> Radius แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜.

แƒแƒ  แƒฉแƒแƒœแƒก แƒ แƒ—แƒฃแƒšแƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ›! แƒ”แƒจแƒ›แƒแƒ™แƒ˜ แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒจแƒ˜แƒ. แƒ™แƒ”แƒ แƒซแƒแƒ“:

  • แƒแƒ› แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— PON OLT-แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒแƒก, แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ”แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ FreeRadius-แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ“แƒ แƒ˜แƒก headend-แƒ˜แƒก MAC แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒก, Agent-Circuit-Id-แƒ˜แƒก แƒขแƒแƒšแƒ˜ MAC PON Onu-แƒก แƒ“แƒ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ แƒžแƒแƒ แƒแƒšแƒ˜แƒ—.
  • 82-แƒ” แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒกแƒแƒก, FreeRadius แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ“แƒ แƒ˜แƒก แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ˜แƒก MAC-แƒก แƒ“แƒ แƒ˜แƒ•แƒกแƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒขแƒ แƒ˜แƒ‘แƒฃแƒขแƒ”แƒ‘แƒ˜แƒ— Agent-Circuit-Id แƒ“แƒ Agent-Remote-Id, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“, แƒ˜แƒกแƒ”แƒ• MAC-แƒก. แƒกแƒแƒ แƒ”แƒšแƒ”แƒ แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜ แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒ“แƒแƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜.
  • WiFI แƒฅแƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ›แƒฅแƒแƒœแƒ” แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ PAP-CHAP แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ”แƒ‘แƒ˜แƒ—
  • WIFI แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒ˜ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒขแƒแƒšแƒ˜แƒ WIFI แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒก MAC แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒก, แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”.

แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒฃแƒšแƒ˜ แƒคแƒแƒœแƒ˜: แƒ แƒ แƒแƒ แƒ˜แƒก "แƒแƒคแƒชแƒ˜แƒ 82" DHCP-แƒจแƒ˜

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ DHCP แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒแƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ, แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ Agent-Circuit-Id แƒ“แƒ Agent-Remote-Id แƒ•แƒ”แƒšแƒ”แƒ‘แƒจแƒ˜. แƒฉแƒ•แƒ”แƒฃแƒšแƒ”แƒ‘แƒ แƒ˜แƒ• แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒกแƒแƒ แƒ”แƒšแƒ”แƒ แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜แƒก MAC แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒก แƒ’แƒแƒ“แƒแƒกแƒแƒชแƒ”แƒ›แƒแƒ“, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜ แƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. PON แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒแƒœ WIFI แƒกแƒแƒ‘แƒแƒ–แƒ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, Agent-Circuit-Id แƒ•แƒ”แƒšแƒ˜ แƒแƒ  แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒแƒกแƒแƒ แƒ’แƒ”แƒ‘แƒšแƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒแƒก (แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜). แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ DHCP แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ–แƒแƒ’แƒแƒ“แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜แƒ:

แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ FreeRadius-แƒ“แƒแƒœ DHCP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—

แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ”แƒก แƒกแƒฅแƒ”แƒ›แƒ แƒแƒกแƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก:

  1. แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒ แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก DHCP แƒ›แƒแƒฃแƒฌแƒงแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒฆแƒ”แƒ‘แƒแƒ“
  2. แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ (แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ˜, WiFi แƒแƒœ PON แƒกแƒแƒ‘แƒแƒ–แƒ แƒกแƒแƒ“แƒ’แƒฃแƒ แƒ˜), แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒแƒ แƒ˜แƒก แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒ, โ€žแƒฉแƒแƒญแƒ แƒ˜แƒกโ€œ แƒแƒ› แƒžแƒแƒ™แƒ”แƒขแƒก แƒ“แƒ แƒชแƒ•แƒšแƒ˜แƒก แƒ›แƒแƒก, แƒจแƒ”แƒ›แƒแƒแƒฅแƒ•แƒก แƒ›แƒแƒกแƒจแƒ˜ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒแƒคแƒชแƒ˜แƒ”แƒ‘แƒ˜ 82 แƒ“แƒ แƒกแƒแƒ แƒ”แƒšแƒ”แƒ แƒแƒ’แƒ”แƒœแƒขแƒ˜แƒก IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ แƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ›แƒก แƒ›แƒแƒก แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›แƒจแƒ˜. แƒฅแƒกแƒ”แƒšแƒ˜.
  3. DHCP แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก, แƒฅแƒ›แƒœแƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒก แƒ“แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ›แƒแƒก แƒกแƒแƒ แƒ”แƒšแƒ”แƒ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒ–แƒ”
  4. แƒกแƒแƒ แƒ”แƒšแƒ”แƒ แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒกแƒแƒžแƒแƒกแƒฃแƒฎแƒ แƒžแƒแƒ™แƒ”แƒขแƒก แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒแƒฌแƒงแƒแƒ‘แƒ˜แƒšแƒแƒ‘แƒแƒ–แƒ”

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒกแƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“ แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก; แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“.

FreeRadius-แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒแƒ›แƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ FreeRadius-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒ แƒ—แƒฃแƒšแƒ˜ แƒ“แƒ แƒ’แƒแƒฃแƒ’แƒ”แƒ‘แƒแƒ แƒ˜แƒ... แƒ’แƒแƒœแƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ˜แƒ— แƒ›แƒแƒจแƒ˜แƒœ, แƒ แƒแƒชแƒ แƒ˜แƒฅ แƒ›แƒ˜แƒ“แƒ˜แƒฎแƒแƒ  N แƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒ โ€žแƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒกโ€œ. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”แƒ— แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ FreeRadius-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Python-แƒจแƒ˜. แƒฉแƒ•แƒ”แƒœ แƒแƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก MySQL แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒ‘แƒแƒ–แƒ˜แƒ“แƒแƒœ. แƒแƒ–แƒ แƒ˜ แƒแƒ  แƒแƒฅแƒ•แƒก แƒ›แƒ˜แƒกแƒ˜ แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒแƒก; แƒงแƒแƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒ›แƒแƒก "แƒ—แƒแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก". แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ›แƒ” แƒแƒ•แƒ˜แƒฆแƒ” แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒกแƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ”แƒœ FreeRadius-แƒ˜แƒก sql แƒ›แƒแƒ“แƒฃแƒšแƒก แƒ“แƒ แƒแƒ“แƒœแƒแƒ• แƒจแƒ”แƒ•แƒชแƒ•แƒแƒšแƒ”, แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Mac-แƒ˜แƒก แƒ“แƒ แƒžแƒแƒ แƒขแƒ˜แƒก แƒ•แƒ”แƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—, แƒจแƒ”แƒกแƒ•แƒšแƒ-แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฏแƒ”แƒ  แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒ”แƒ— FreeRadius:

cd /usr/ports/net/freeradius3
make config
make
install clean

แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜ แƒแƒ˜แƒ แƒฉแƒ˜แƒ”แƒ— แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“:

แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ FreeRadius-แƒ“แƒแƒœ DHCP-แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—

แƒฉแƒ•แƒ”แƒœ แƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ— แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒฃแƒ  แƒ‘แƒ›แƒฃแƒšแƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ—แƒแƒœ (แƒแƒœแƒฃ โ€žแƒฉแƒแƒ แƒ—แƒ”แƒ—โ€œ):

ln -s /usr/local/etc/raddb/mods-available/python /usr/local/etc/raddb/mods-enabled

แƒ›แƒแƒ“แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก:

pip install mysql-connector

แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜ FreeRadius-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒ˜ python_path แƒชแƒ•แƒšแƒแƒ“แƒจแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒ›แƒ” แƒ›แƒแƒฅแƒ•แƒก แƒ”แƒก:

python_path="/usr/local/etc/raddb/mods-config/python:/usr/local/lib/python2.7:/usr/local/lib/python27.zip:/usr/local/lib/python2.7:/usr/local/lib/python2.7/plat-freebsd12:/usr/local/lib/python2.7/lib-tk:/usr/local/lib/python2.7/lib-old:/usr/local/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/site-packages"

แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ˜แƒ’แƒแƒ— แƒ‘แƒ˜แƒšแƒ˜แƒ™แƒ”แƒ‘แƒ˜ แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ—แƒแƒ แƒฏแƒ˜แƒ›แƒœแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒงแƒ•แƒแƒœแƒ˜แƒ—:

root@phaeton:/usr/local/etc/raddb/mods-enabled# python
Python 2.7.15 (default, Dec  8 2018, 01:22:25) 
[GCC 4.2.1 Compatible FreeBSD Clang 6.0.1 (tags/RELEASE_601/final 335540)] on freebsd12
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python27.zip', '/usr/local/lib/python2.7', '/usr/local/lib/python2.7/plat-freebsd12', '/usr/local/lib/python2.7/lib-tk', '/usr/local/lib/python2.7/lib-old', '/usr/local/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/site-packages']
>

แƒ—แƒฃ แƒแƒ› แƒœแƒแƒ‘แƒ˜แƒฏแƒก แƒแƒ  แƒ’แƒแƒ“แƒแƒ“แƒ’แƒแƒ›แƒ—, แƒ›แƒแƒจแƒ˜แƒœ แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ“แƒ FreeRadius-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ•แƒ”แƒ  แƒ˜แƒžแƒแƒ•แƒ˜แƒแƒœ แƒ˜แƒ› แƒ›แƒแƒ“แƒฃแƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฉแƒแƒ›แƒแƒ—แƒ•แƒšแƒ˜แƒšแƒ˜แƒ แƒ˜แƒ›แƒžแƒแƒ แƒขแƒจแƒ˜. แƒ’แƒแƒ แƒ“แƒ แƒแƒ›แƒ˜แƒกแƒ, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒแƒฃแƒฅแƒ›แƒแƒ— แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ“แƒ แƒแƒฆแƒ แƒ˜แƒชแƒฎแƒ•แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ“แƒฃแƒšแƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒจแƒ˜. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ”แƒก แƒ›แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

python {
    python_path="/usr/local/etc/raddb/mods-config/python:/usr/local/lib/python2.7:/usr/local/lib/python2.7/site-packages:/usr/local/lib/python27.zip:/usr/local/lib/python2.7:/usr/local/lib/python2.7/plat-freebsd12:/usr/local/lib/python2.7/lib-tk:/usr/local/lib/python2.7/lib-old:/usr/local/lib/python2.7/lib-dynload:/usr/local/lib/python2.7/site-packages"
    module = work
    mod_instantiate = ${.module}
    mod_detach = ${.module}

    mod_authorize = ${.module}
    func_authorize = authorize

    mod_authenticate = ${.module}
    func_authenticate = authenticate

    mod_preacct = ${.module}
    func_preacct = preacct

    mod_accounting = ${.module}
    func_accounting = accounting

    mod_checksimul = ${.module}
    mod_pre_proxy = ${.module}
    mod_post_proxy = ${.module}
    mod_post_auth = ${.module}
    mod_recv_coa = ${.module}
    mod_send_coa = ${.module}

}

work.py แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ (แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒ แƒกแƒฎแƒ•แƒ) แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก /usr/local/etc/raddb/mods-config/python-แƒจแƒ˜ แƒกแƒฃแƒš แƒกแƒแƒ›แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒ›แƒแƒฅแƒ•แƒก.

work.py:

#!/usr/local/bin/python
# coding=utf-8
import radiusd
import func
import sys
from pprint import pprint
mysql_host="localhost"
mysql_username="ัƒะบะฐั†ัƒะบ"
mysql_password="ั‹ัƒะบะฐั‹ัƒะบะฐั‹ัƒะบ"
mysql_base="ั‹ัƒะบะฐั‹ะบัƒะฐั‹ัƒ"
def instantiate(p):
print ("*** instantiate ***")
print (p)
# return 0 for success or -1 for failure
def authenticate(p):
print ("*** ะัƒั‚ะตะฝั„ะธะบะฐั†ะธั!!***")
print (p)
def authorize(p):
radiusd.radlog(radiusd.L_INFO, '*** radlog call in authorize ***')    
conn=func.GetConnectionMysql(mysql_host, mysql_username, mysql_password, mysql_base);
param=func.ConvertArrayToNames(p);
pprint(param)
print ("*** ะะฒั‚ะพั€ะธะทะฐั†ะธั ***")
reply = ()
conf = ()
cnt=0
username="";mac="";
# ัะฝะฐั‡ะฐะปะฐ ะฟั€ะพะฒะตั€ัะตะผ "ะบะฐะบ ะฟะพะปะพะถะตะฝะพ", ะฟะพ ัะฒัะทะบะต ะปะพะณะธะฝ/ะฟะฐั€ะพะปัŒ
if ("User-Name" in param) and ("User-Password" in param) :
print ("ะ’ะฐั€ะธะฐะฝั‚ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ (1): ะตัั‚ัŒ ะปะพะณะธะฝ-ะฟะฐั€ะพะปัŒ")
pprint(param["User-Name"])
pprint(param["User-Password"])
pprint(conn)
print(sys.version_info)
print (radiusd.config)
sql="select radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where radcheck.username=%s and radcheck.value=%s"
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql,[param["User-Name"], param["User-Password"]]);
row = cursor.fetchone()	
while row is not None:    
cnt=cnt+1
username=row["username"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
# ะฒะฐั€ะธะฐะฝั‚, ั‡ั‚ะพ User-Name - ัั‚ะพ ะœะะก ะฐะดั€ะตั ะ‘ะก,ะฟะฐั€ะพะปั ะธ ะฟะพั€ั‚ะฐ ะฝะตั‚                
if ("User-Name" in param)  and ("User-Password" in param) and (cnt==0):
if param["User-Password"] =='':
if ":" in param["User-Name"]:
pprint(param["User-Name"])            
print ("ะ’ะฐั€ะธะฐะฝั‚ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ (2): User-Name - ัั‚ะพ MAC ะฐะดั€ะตั ะฑะฐะทะพะฒะพะน ัั‚ะฐะฝั†ะธะธ, ะฟะพั€ั‚ะฐ ะธ ะฟะฐั€ะพะปั ะฝะตั‚")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where REPLACE(radcheck.mac,':','') = REPLACE(REPLACE('"+str(param["User-Name"])+"','0x',''),':','') and radcheck.sw_port=''"
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:                  
cnt=cnt+1
username=row["username"]
mac=param["User-Name"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
if ("Agent-Remote-Id" in param)  and ("User-Password" in param) and (cnt==0):
if param["User-Password"] =='':
pprint(param["Agent-Remote-Id"])            
print ("ะ’ะฐั€ะธะฐะฝั‚ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ (2.5): Agent-Remote-Id - ัั‚ะพ MAC ะฐะดั€ะตั PON ะพะฑะพั€ัƒะดะพะฒะฐะฝะธั")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where REPLACE(radcheck.mac,':','') = REPLACE(REPLACE('"+str(param["Agent-Remote-Id"])+"','0x',''),':','') and radcheck.sw_port=''"
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:                  
cnt=cnt+1
username=row["username"]
mac=param["User-Name"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
#ะ’ะฐั€ะธะฐะฝั‚, ั‡ั‚ะพ Agent-Remote-Id - ัั‚ะพ ะœะะก ะฐะดั€ะตั ะ‘ะก,ะฟะฐั€ะพะปั ะธ ะฟะพั€ั‚ะฐ ะฝะตั‚ ะธ ะฟั€ะตะดั‹ะดัƒั‰ะธะต ะฒะฐั€ะธะฐะฝั‚ั‹ ะฟะพะธัะบะฐ IP ั€ะตะทัƒะปัŒั‚ะฐั‚ะฐ ะฝะต ะดะฐะปะธ                
if ("Agent-Remote-Id" in param)  and ("User-Password" not in param) and (cnt==0):
pprint(param["Agent-Remote-Id"])            
print ("ะ’ะฐั€ะธะฐะฝั‚ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ (3): Agent-Remote-Id - ะœะะก ะฑะฐะทะพะฒะพะน ัั‚ะฐะฝั†ะธะธ/ะฟะพะฝ. ะŸะพั€ั‚ะฐ ะฒ ะฑะธะปะปะธะฝะณะต ะฝะตั‚")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where REPLACE(radcheck.mac,':','') = REPLACE(REPLACE('"+str(param["Agent-Remote-Id"])+"','0x',''),':','') and radcheck.sw_port=''"
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:    
cnt=cnt+1
mac=param["Agent-Remote-Id"]
username=row["username"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
#ะ’ะฐั€ะธะฐะฝั‚, ั‡ั‚ะพ ะฟั€ะตะดั‹ะดัƒั‰ะธะต ะฟะพะฟั‹ั‚ะบะธ ั€ะตะทัƒะปัŒั‚ะฐั‚ะฐ ะฝะต ะดะฐะปะธ, ะฝะพ ะตัั‚ัŒ Agent-Remote-Id ะธ Agent-Circuit-Id
if ("Agent-Remote-Id" in param)  and ("Agent-Circuit-Id" in param) and (cnt==0):
pprint(param["Agent-Remote-Id"])            
pprint(param["Agent-Circuit-Id"])            
print ("ะ’ะฐั€ะธะฐะฝั‚ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ (4): ะฐะฒั‚ะพั€ะธะทะฐั†ะธั ะฟะพ Agent-Remote-Id ะธ Agent-Circuit-Id, ะฒ ะฑะธะปะปะธะฝะณะต ะตัั‚ัŒ ะฟะพั€ั‚/ะผะฐะบ")
sql="select radreply.username,radreply.attribute,radreply.value from radcheck inner join radreply on radreply.username=radcheck.username where upper(radcheck.sw_mac)=upper(REPLACE('"+str(param["Agent-Remote-Id"])+"','0x','')) and upper(radcheck.sw_port)=upper(RIGHT('"+str(param["Agent-Circuit-Id"])+"',2)) and radcheck.sw_port<>''"
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:    
cnt=cnt+1
mac=param["Agent-Remote-Id"]
username=row["username"]
reply = reply+((str(row["attribute"]),str(row["value"])), )
row = cursor.fetchone()	          
# ะตัะปะธ ั‚ะฐะบ ะดะพ ัะธั… ะฟะพั€ IP ะฝะต ะฟะพะปัƒั‡ะตะฝ, ั‚ะพ ะฒั‹ะดะฐัŽ ะธะตะณะพ ะธะท ะณะพัั‚ะตะฒะพะน ัะตั‚ะธ..
if cnt==0:      
print ("ะะธ ะพะดะธะฝ ะธะท ะฒะฐั€ะธะฐะฝั‚ะพะฒ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ ะฝะต ัั€ะฐะฑะพั‚ะฐะป, ะฟะพะปัƒั‡ะฐัŽ IP ะธะท ะณะพัั‚ะตะฒะพะน ัะตั‚ะธ..")
ip=func.GetGuestNet(conn)      
if ip!="": 
cnt=cnt+1;
reply = reply+(("Framed-IP-Address",str(ip)), )
# ะตัะปะธ ัะพะฒัะตะผ ะฒัั‘ ะฟะปะพั…ะพ, ั‚ะพ Reject
if cnt==0:
conf = ( ("Auth-Type", "Reject"), ) 
else:
#ะตัะปะธ ะฐะฒั‚ะพั€ะธะทะฐั†ะธั ัƒัะฟะตัˆะฝะฐั (ะตัั‚ัŒ ั‚ะฐะบะพะน ะฐะฑะพะฝะตะฝั‚), ั‚ะพ ะทะฐะฟะธัˆะตะผ ะธัั‚ะพั€ะธัŽ ะฐะฒั‚ะพั€ะธะทะฐั†ะธะธ
if username!="":
func.InsertToHistory(conn,username,mac, reply);
conf = ( ("Auth-Type", "Accept"), )             
pprint (reply)
conn=None;
return radiusd.RLM_MODULE_OK, reply, conf
def preacct(p):
print ("*** preacct ***")
print (p)
return radiusd.RLM_MODULE_OK
def accounting(p):
print ("*** ะะบะบะฐัƒะฝั‚ะธะฝะณ ***")
radiusd.radlog(radiusd.L_INFO, '*** radlog call in accounting (0) ***')  
print (p)
conn=func.GetConnectionMysql(mysql_host, mysql_username, mysql_password, mysql_base);
param=func.ConvertArrayToNames(p);
pprint(param)  
print("ะฃะดะฐะปะธะผ ัั‚ะฐั€ั‹ะต ัะตััะธะธ (ะฑะพะปะตะต 20 ะผะธะฝัƒั‚ ะฝะตั‚ ะฐะบะบะฐัƒะฝั‚ะธะฝะณะฐ)");
sql="delete from radacct where TIMESTAMPDIFF(minute,acctupdatetime,now())>20"
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql);
conn.commit()
print("ะžะฑะฝะพะฒะธะผ/ะดะพะฑะฐะฒะธะผ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ ัะตััะธะธ")
if (("Acct-Unique-Session-Id" in param) and ("User-Name" in param) and ("Framed-IP-Address" in param)):
sql='insert into radacct (radacctid,acctuniqueid,username,framedipaddress,acctstarttime) values (null,"'+str(param['Acct-Unique-Session-Id'])+'","'+str(param['User-Name'])+'","'+str(param['Framed-IP-Address'])+'",now()) ON DUPLICATE KEY update acctupdatetime=now()'
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)
cursor.execute(sql)
conn.commit()
conn=None;
return radiusd.RLM_MODULE_OK
def pre_proxy(p):
print ("*** pre_proxy ***")
print (p)
return radiusd.RLM_MODULE_OK
def post_proxy(p):
print ("*** post_proxy ***")
print (p)
return radiusd.RLM_MODULE_OK
def post_auth(p):
print ("*** post_auth ***")
print (p)
return radiusd.RLM_MODULE_OK
def recv_coa(p):
print ("*** recv_coa ***")
print (p)
return radiusd.RLM_MODULE_OK
def send_coa(p):
print ("*** send_coa ***")
print (p)
return radiusd.RLM_MODULE_OK
def detach():
print ("*** ะะฐ ัั‚ะพะผ ะฒัั‘ ะดะตั‚ะธัˆะตั‡ะบะธ ***")
return radiusd.RLM_MODULE_OK

func.py:

#!/usr/bin/python2.7
# coding=utf-8
import mysql.connector
from mysql.connector import Error
# ะคัƒะฝะบั†ะธั ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ ัะพะตะดะธะฝะตะฝะธะต ั MySQL
def GetConnectionMysql(mysql_host, mysql_username, mysql_password, mysql_base):    
try:
conn = mysql.connector.connect(host=mysql_host,database=mysql_base,user=mysql_username,password=mysql_password)
if conn.is_connected(): print('---cะพะตะดะธะฝะตะฝะธะต ั ะ‘ะ” '+mysql_base+' ัƒัั‚ะฐะฝะพะฒะปะตะฝะพ')
except Error as e:
print("ะžัˆะธะฑะบะฐ: ",e);
exit(1);       
return conn
def ConvertArrayToNames(p):
mass={};
for z in p:
mass[z[0]]=z[1]
return mass
# ะคัƒะฝะบั†ะธั ะทะฐะฟะธัั‹ะฒะฐะตั‚ ะธัั‚ะพั€ะธัŽ ัะพะตะดะธะฝะตะฝะธั ะฟะพ ะธะทะฒะตัั‚ะฝั‹ะผ ะดะฐะฝะฝั‹ะผ
def InsertToHistory(conn,username,mac, reply):
print("--ะทะฐะฟะธัั‹ะฒะฐัŽ ะดะปั ะธัั‚ะพั€ะธะธ")
repl=ConvertArrayToNames(reply)
if "Framed-IP-Address" in repl:
sql='insert into radpostauth (username,reply,authdate,ip,mac,session_id,comment) values ("'+username+'","Access-Accept",now(),"'+str(repl["Framed-IP-Address"])+'","'+str(mac)+'","","")'
print(sql)
cursor = conn.cursor(dictionary=True,buffered=True)          
cursor.execute(sql);
conn.commit()
# ะคัƒะฝะบั†ะธั ะฒั‹ะดะฐะตั‚ ะฟะพัะปะตะดะฝะธะน ะฟะพ ะดะฐั‚ะต ะฒั‹ะดะฐั‡ะธ IP ะฐะดั€ะตั ะธะท ะณะพัั‚ะตะฒะพะน ัะตั‚ะธ        
def GetGuestNet(conn):
ip="";id=0
sql="select * from guestnet order by dt limit 1"
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)          
cursor.execute(sql);
row = cursor.fetchone()	
while row is not None:    
ip=row["ip"]
id=row["id"]
row = cursor.fetchone()	          
if id>0:
sql="update guestnet set dt=now() where id="+str(id)
print (sql)
cursor = conn.cursor(dictionary=True,buffered=True)          
cursor.execute(sql);
conn.commit()
return ip         

radiusd.py:

#!/usr/bin/python2.7
# coding=utf-8
# from modules.h
RLM_MODULE_REJECT = 0
RLM_MODULE_FAIL = 1
RLM_MODULE_OK = 2
RLM_MODULE_HANDLED = 3
RLM_MODULE_INVALID = 4
RLM_MODULE_USERLOCK = 5
RLM_MODULE_NOTFOUND = 6
RLM_MODULE_NOOP = 7
RLM_MODULE_UPDATED = 8
RLM_MODULE_NUMCODES = 9
# from log.h
L_AUTH = 2
L_INFO = 3
L_ERR = 4
L_WARN = 5
L_PROXY = 6
L_ACCT = 7
L_DBG = 16
L_DBG_WARN = 17
L_DBG_ERR = 18
L_DBG_WARN_REQ = 19
L_DBG_ERR_REQ = 20
# log function
def radlog(level, msg):
import sys
sys.stdout.write(msg + 'n')
level = level

แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒ“แƒ˜แƒ“แƒแƒœ แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒฉแƒ•แƒ”แƒœ แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ— แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒ˜แƒ“แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒแƒก แƒงแƒ•แƒ”แƒšแƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒ›แƒ˜แƒกแƒ˜ แƒชแƒœแƒแƒ‘แƒ˜แƒšแƒ˜ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ˜แƒก MAC แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒ— แƒแƒœ แƒแƒคแƒชแƒ˜แƒ 82 แƒ™แƒแƒ›แƒ‘แƒ˜แƒœแƒแƒชแƒ˜แƒ˜แƒ—, แƒ“แƒ แƒ—แƒฃ แƒ”แƒก แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒชแƒ”แƒ›แƒ— แƒฃแƒซแƒ•แƒ”แƒšแƒ”แƒก IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ“แƒ”แƒกแƒ›แƒ” แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "แƒกแƒขแƒฃแƒ›แƒ แƒ˜แƒกแƒ’แƒแƒœ". โ€ แƒฅแƒกแƒ”แƒšแƒ˜. แƒ แƒฉแƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒกแƒแƒ˜แƒขแƒ”แƒ‘แƒ–แƒ” แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜, แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒแƒœแƒ˜แƒจแƒœแƒฃแƒš แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒจแƒ˜ แƒ˜แƒ™แƒ”แƒชแƒ”แƒ‘แƒ. แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒจแƒ˜ แƒ›แƒ˜แƒขแƒแƒœแƒ:

แƒžแƒแƒกแƒขแƒ˜

server default {
listen {
type = auth
ipaddr = *
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipaddr = *
port = 0
type = acct
limit {
}
}
listen {
type = auth
port = 0
limit {
max_connections = 1600
lifetime = 0
idle_timeout = 30
}
}
listen {
ipv6addr = ::
port = 0
type = acct
limit {
}
}
authorize {
python
filter_username
preprocess
expiration
logintime
}
authenticate {
Auth-Type PAP {
pap
python
}
Auth-Type CHAP {
chap
python
}
Auth-Type MS-CHAP {
mschap
python
}
eap
}
preacct {
preprocess
acct_unique
suffix
files
}
accounting {
python
exec
attr_filter.accounting_response
}
session {
}
post-auth {
update {
&reply: += &session-state:
}
exec
remove_reply_message_if_eap
Post-Auth-Type REJECT {
attr_filter.access_reject
eap
remove_reply_message_if_eap
}
Post-Auth-Type Challenge {
}
}
pre-proxy {
}
post-proxy {
eap
}
}

แƒ›แƒแƒ“แƒ˜แƒ— แƒ•แƒชแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ“แƒ แƒ•แƒœแƒแƒฎแƒแƒ—, แƒ แƒ แƒจแƒ”แƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒŸแƒฃแƒ แƒœแƒแƒšแƒจแƒ˜:

/usr/local/etc/rc.d/radiusd debug

แฒกแƒฎแƒ•แƒ แƒ แƒ. FreeRadius-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ›แƒแƒกแƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ radclient แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ:

echo "User-Name=4C:5E:0C:2E:7F:15,Agent-Remote-Id=0x9845623a8c98,Agent-Circuit-Id=0x00010006" | radclient -x  127.0.0.1:1812 auth testing123

แƒแƒœ แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜:

echo "User-Name=4C:5E:0C:2E:7F:15,Agent-Remote-Id=0x00030f26054a,Agent-Circuit-Id=0x00010002" | radclient -x  127.0.0.1:1813 acct testing123

แƒ›แƒ˜แƒœแƒ“แƒ แƒ’แƒแƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒแƒ—, แƒ แƒแƒ› แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒแƒ“ แƒจแƒ”แƒฃแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒฅแƒ”แƒ›แƒ˜แƒกแƒ แƒ“แƒ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ โ€žแƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”โ€œ โ€žแƒ˜แƒœแƒ“แƒฃแƒกแƒขแƒ แƒ˜แƒฃแƒšแƒ˜โ€œ แƒ›แƒแƒกแƒจแƒขแƒแƒ‘แƒ˜แƒ—. แƒงแƒแƒ•แƒ”แƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒ›แƒฉแƒœแƒ”แƒ•แƒ˜:

  • แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ MAC แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒก โ€žแƒ’แƒแƒงแƒแƒšแƒ‘แƒ”แƒ‘แƒโ€œ. แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒแƒ‘แƒแƒœแƒ”แƒœแƒขแƒ›แƒ แƒ“แƒแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒแƒก แƒกแƒฎแƒ•แƒ˜แƒกแƒ˜ MAC แƒ“แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜
  • แƒกแƒขแƒฃแƒ›แƒ แƒ”แƒ‘แƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒชแƒ”แƒ›แƒ˜แƒก แƒšแƒแƒ’แƒ˜แƒ™แƒ แƒ™แƒ แƒ˜แƒขแƒ˜แƒ™แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ›แƒแƒ. แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒช แƒ™แƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก "แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒแƒœ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ” IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒ—?"

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ "แƒœแƒแƒ›แƒชแƒฎแƒ•แƒ แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒญแƒ แƒ”แƒšแƒ˜ แƒฎแƒกแƒœแƒแƒ แƒ˜", แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒšแƒ˜แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒแƒ“ แƒฉแƒ”แƒ›แƒก แƒžแƒ˜แƒ แƒแƒ‘แƒ”แƒ‘แƒจแƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒแƒ“, แƒ›แƒ”แƒขแƒ˜ แƒแƒ แƒแƒคแƒ”แƒ แƒ˜. แƒ›แƒ™แƒแƒชแƒ แƒแƒ“ แƒœแƒฃ แƒ’แƒแƒœแƒกแƒฏแƒ˜แƒ— ๐Ÿ˜‰

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ