我已经将 FreeRADIUS 3.0.11 安装在 Ubuntu Server 16.04 上。Ubuntu Server 在 ESXi 虚拟机上运行。虚拟机有两个 NIC。一个用于连接到管理网络,另一个用于客户 LAN。我还使用 PfSense 虚拟机作为 LAN 和 Ubuntu 服务器之间的防火墙。
问题是当我测试管理网络 radtest test 1234 192.168.1.144 1812 testing123
FreeRADIUS 服务器能够正确通知并应答,但当我从局域网,FreeRADIUS 服务器根本无法获取 Access-Request。我正在以调试模式使用该服务器freeradius -X
。
这些 IP 包括:
Ubuntu server admin NIC, ens160: 192.168.1.144
Ubuntu server NIC to PfSense, ens192: 192.168.34.2
PfSense NIC to Ubuntu server: 192.168.34.1
PfSense LAN NIC: 192.168.33.1
我已经检查过了tcpdumpUbuntu 服务器正在接收 Access-Request 包。IP 192.168.33.50 是笔记本电脑的 IP。
sudo tcpdump -i ens192 port 1812
10:24:18.578802 IP 192.168.33.50.63334 > 192.168.34.2.radius: RADIUS, Access-Request (1), id: 0x09 length: 44
10:24:19.578202 IP 192.168.33.50.63334 > 192.168.34.2.radius: RADIUS, Access-Request (1), id: 0x09 length: 44
我在用着iptables用于将 HTTP 和 HTTPS 转发到 PfSense 虚拟机,以便我可以从管理网络对其进行配置。
# Generated by iptables-save v1.6.0 on Wed May 4 10:23:08 2016
*nat
:PREROUTING ACCEPT [2:396]
:INPUT ACCEPT [2:396]
:OUTPUT ACCEPT [3:213]
:POSTROUTING ACCEPT [3:213]
-A PREROUTING -i ens160 -p tcp -m tcp --dport 4954 -j DNAT --to-destination 192.168.34.1:80
-A PREROUTING -i ens160 -p tcp -m tcp --dport 4955 -j DNAT --to-destination 192.168.34.1:443
-A POSTROUTING -d 192.168.34.1/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.34.2
-A POSTROUTING -d 192.168.34.1/32 -p tcp -m tcp --dport 443 -j SNAT --to-source 192.168.34.2
COMMIT
# Completed on Wed May 4 10:23:08 2016
# Generated by iptables-save v1.6.0 on Wed May 4 10:23:08 2016
*filter
:INPUT ACCEPT [24:2294]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:3245]
-A INPUT -p udp -m udp -m multiport --dports 1812 -m comment --comment "Accept RADIUS" -j ACCEPT
COMMIT
# Completed on Wed May 4 10:23:08 2016
我已经检查 FreeRADIUS 正在监听端口 1812。
netstat -lun | grep 1812
udp 0 0 127.0.0.1:18120 0.0.0.0:*
udp 0 0 0.0.0.0:1812 0.0.0.0:*
udp6 0 0 :::1812 :::*
我尝试将端口 1812 从接口转发到另一个接口,但要么是我配置错误,要么就是没有用。我很确定有一些简单的技巧可以让它工作,但我还没有找到。谢谢你的帮助!
更新
我尝试着请求记录通过取消注释requests = ${logdir}/radiusd-%{%{Virtual-Server}:-DEFAULT}-%Y%m%d.log
文件中的行来/etc/freeradius/radiusd.conf
启用。然而,这会引发错误,并且 freeradius 根本无法启动。调试模式启动,但它不会将任何内容写入 radius.log 文件。
sudo freeradius
radiusd: Error: Failed to parse log{} section.
自 3.0.9 版以来,请求日志似乎不再起作用。来源:github.com/FreeRADIUS/freeradius-server/issues/1131
答案1
我解决了这个问题。我还必须向另一个 NIC 添加网关。
这是我的初始/etc/network/interfaces
文件:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
# This is an autoconfigured IPv6 interface
#auto ens160
#iface ens160 inet6 auto
# ESXi NIC admin network
auto ens160
iface ens160 inet static
address 192.168.1.144
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.3 192.168.1.2
# ESXi NIC DMZ
auto ens192
iface ens192 inet static
address 192.168.34.2
netmask 255.255.255.0
我添加了第二张路由表(最后一行是添加的):
sudo vim /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt2
配置新的路由表:
sudo ip route add 192.168.34.0/24 dev ens192 src 192.168.34.2 table rt2
sudo ip route add default via 192.168.34.1 dev ens192 table rt2
添加路由规则:
sudo ip rule add from 192.168.34.2/32 table rt2
sudo ip rule add to 192.168.34.2/32 table rt2
测试配置是否有效,并通过修改/etc/network/interfaces
文件使其永久生效:
iface ens192 inet static
address 192.168.34.2
netmask 255.255.255.0
post-up ip route add 192.168.34.0/24 dev ens192 src 192.168.34.2 table rt2
post-up ip route add default via 192.168.34.1 dev ens192 table rt2
post-up ip rule add from 192.168.34.2/32 table rt2
post-up ip rule add to 192.168.34.2/32 table rt2
解决方案的来源:https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System
IP表
为了保持端口转发的运行,我必须添加出接口到 iptables 规则(添加 -o ens192):
-A POSTROUTING -d 192.168.34.1/32 -o ens192 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.34.2
-A POSTROUTING -d 192.168.34.1/32 -o ens192 -p tcp -m tcp --dport 443 -j SNAT --to-source 192.168.34.2