Несколько вопросов по Пираду
Я пытаюсь использовать библиотеку pyrad pyrad ( https://github.com/wichert/pyrad) для создания простого сервера Radius. Но у меня были некоторые проблемы с этим.
Вот код, который я использую для создания сервера Radius:
from pyrad import dictionary, packet, server
class FakeServer(server.Server):
def _HandleAuthPacket(self, pkt):
server.Server._HandleAuthPacket(self, pkt)
print('Received an authentication request')
print("Attributes: ")
for attr in pkt.keys():
print("%s: %s" % (attr, pkt[attr]))
# print
username = pkt['User-Name'][0]
password = pkt['User-Password'][0]
password = pkt.PwDecrypt(password)
device_ip = pkt['NAS-IP-Address'][0]
reply = self.CreateReplyPacket(pkt)
# Default to refuse
reply.code = packet.AccessReject
reply['Reply-Message'] = 'You are unable to login'
return self.SendReplyPacket(pkt.fd, reply)
def _HandleAcctPacket(self, pkt):
server.Server._HandleAcctPacket(self, pkt)
print("Received an accounting request")
print("Attributes: ")
for attr in pkt.keys():
print("%s: %s" % (attr, pkt[attr]))
# print
reply = self.CreateReplyPacket(pkt)
self.SendReplyPacket(pkt.fd, reply)
if __name__ == '__main':
srv = FakeServer(dict=dictionary.Dictionary("dictionary/dictionary"))
srv.hosts["192.168.3.183"] = server.RemoteHost("192.168.3.183",
b"Kah3choteereethiejeimaeziecumi",
"192.168.3.183")
srv.BindToAddress("")
print('Radius server is ready to start!')
srv.Run()
Это код, который я использую для подключения к серверу:
from __future__ import print_function
from pyrad.client import Client
from pyrad.dictionary import Dictionary
import pyrad.packet
srv = Client(server="192.168.3.183", secret=b"Kah3choteereethiejeimaeziecumi",
dict=Dictionary("dictionary/dictionary"))
# create request
req = srv.CreateAuthPacket(code=pyrad.packet.AccessRequest, User_Name="test",
NAS_IP_Address="192.168.2.101")
req["User-Password"] = req.PwCrypt("password")
# send request
reply = srv.SendPacket(req)
if reply.code == pyrad.packet.AccessAccept:
print("access accepted")
else:
print("access denied")
print("Attributes returned by server:")
for i in reply.keys():
print("%s: %s" % (i, reply[i]))
Если я запускаю сервер и подключаюсь с локального, это работа! скриншот
Но если я подключусь с другого компьютера, он истечет, и pyrad.log покажет это:
Dropping packet: Received packet from unknown host
Я давно ищу в сети. Но бесполезно. Пожалуйста, помогите или попробуйте дать некоторые идеи, как этого добиться.
2 ответа
Чтобы быть действительным запросом RADIUS, сервер RADIUS обычно ожидает не только запросы на использование секрета RADIUS, но и запросы, поступающие с определенного IP-адреса.
Не зная Python / Pyrad Я предполагаю, что по крайней мере один из IP-адресов в следующей части кода вашего сервера должен быть IP-адресом клиента, с которого вы пытаетесь отправить запрос:
server.RemoteHost("192.168.3.183", b"Kah3choteereethiejeimaeziecumi", "192.168.3.183")
Проверьте документацию Pyrad, он должен что-то сказать о клиентских IP-адресах.
Я нашел это, когда искал ответ сам. В конце концов я перерыл библиотеку кода и получил ответ от сервера. Для фона я настраиваю это для рю-контроллера. Мой сервер FreeRADIUS, и они находятся на разных виртуальных машинах. Я проводил тестирование с помощью утилиты radclient, поэтому я уже знал, что сервер работает.
На этой линии:
srv = Client(server="192.168.3.183", secret=b"Kah3choteereethiejeimaeziecumi", dict=Dictionary("dictionary/dictionary"))
убедитесь, что server="192.168.3.183" - это IP-адрес вашего сервера. Когда я сначала посмотрел на этот код, я подумал, что мне нужно включить IP-адрес клиента, но я вспомнил, что Radtest не требует этого - так что это побудило меня изменить параметр. Также я удалил NAS_IP_Address из метода / функции CreateAuthPacket.
Ваш код сервера, кажется, перечисляет 192.168.3.183 в качестве клиента. Таким образом, ваш клиентский объект настраивается как сервер "RADIUS". Я бы порекомендовал настроить FreeRADIUS и использовать утилиту radtest/radclient (она является частью FreeRADIUS) и протестировать каждый фрагмент кода отдельно. Руководство по быстрой установке
Надеюсь это поможет.