Hi Dirrch,
danke für deine Mühen
, aber ich habe wie schon im Forum erwähnt festgestellt woran es gelegen hat.
Folgendes Problem war:
Ich benutze doch mpd, daran FreeRADIUS, und FreeRADIUS mit PostgreSQL. Um nich ständig übers Terminal Benutzer anlegen zu müssen benutze ich DialupAdmin (
http://www.freeradius.org/dialupadmin.html) was sogesehen ganz cool, aber fucking buggy und unfertig ist.
Was das mit IPFW zu tun hat?
... naja, wenn ich nun hergehe und einen Benutzer wie konservativ üblich einfach von Hand über das Terminal mit vi folgendermaßen in die /usr/local/etc/raddb/user eintrage:
Code:
[root@wisp ~]# cat /usr/local/etc/raddb/users
test User-Password == "schaefer"
Service-Type = Framed-User,
Framed-Protocol = PPP,
Framed-IP-Address = 1.2.3.4,
Framed-IP-Netmask = 255.255.255.255,
Framed-Routing = Broadcast-Listen,
Framed-Filter-Id = "std.ppp",
Framed-MTU = 1492,
Framed-Compression = Van-Jacobsen-TCP-IP,
mpd-table += "1=11.1.11.1",
mpd-table += "1=1.2.3.4",
mpd-pipe += "1=bw 10Kbyte/s",
mpd-pipe += "5=bw 20Kbyte/s",
mpd-rule += "1=pipe %p1 all from any to table\\(%t1\\) in",
mpd-rule += "2=pipe %p5 all from table\\(%t1\\) to any out",
mpd-rule += "100=allow all from any to any",
^^ dann übergibt der RADIUS die IPFW Regeln genau so wie erwünscht an den mpd.
WENN ich jetzt ABER, das ganze über Dialup Admin mache - was ja mein Ziel ist, damit jeder Dummie später Benutzer über das Webinterface anlegen kann
, habe ich das Problem, dass das Dialup Admin (FreeRADIUS-)Webinterface diese Attribute schon a) nicht ganz korrekt in die Postgres Datenbank einträgt und b) es dann auch nicht erfolgreich an den mpd weiter übergeben werden kann.
In unserem Google Problem fall hat er beispielsweiße nur folgende Regeln an den mpd übergeben:
(ganz problematisch sind diese Backslashes mit denen der Dialup Admin mal keinen Meter umgehen kann, die ich aber dringend benötige, da es ja später Shell Befehle sind ...)
(Auszug aus der mpd Log mit dem von Dialup Admin fehlerhaft angelegten Benutzer
Code:
[rl0-3] RADIUS: rec'd RAD_ACCESS_ACCEPT for user leander
[rl0-3] RADIUS: RadiusGetParams: RAD_FRAMED_IP_ADDRESS: 255.255.255.254
we should choose an address
[rl0-3] RADIUS: RadiusGetParams: RAD_FRAMED_MTU: 576
[rl0-3] RADIUS: RadiusGetParams: (RAD_SERVICE_TYPE: 2)
[rl0-3] RADIUS: RadiusGetParams: (RAD_FRAMED_PROTOCOL: 1)
[rl0-3] RADIUS: RadiusGetParams: (RAD_FRAMED_COMPRESSION: 1)
[rl0-3] RADIUS: RadiusGetParams: RAD_FRAMED_IP_NETMASK: 255.255.255.255 (/32)
[rl0-3] RADIUS: RadiusGetParams: RAD_SESSION_TIMEOUT: 86400
[rl0-3] RADIUS: RadiusGetParams: RAD_IDLE_TIMEOUT: 300
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_TABLE: 1=11.1.11.1
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_PIPE: 1=bw 128Kbyte/s
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_RULE: 1=pipe %p1 all from any to table\(%t1\) in
[rl0-3] AUTH: RADIUS returned authenticated
[rl0-3] AUTH: Auth-Thread finished normally
[rl0-3] CHAP: ChapInputFinish: status authenticated
Reply message: Welcome
Hier noch ein Auszug einer Erfolgreichen Benutzeranmeldung von dem Benutzer den ich von Hand in /usr/local/etc/raddb/user eingetragen habe:
Code:
[rl0-3] RADIUS: rec'd RAD_ACCESS_ACCEPT for user test
[rl0-3] RADIUS: RadiusGetParams: (RAD_SERVICE_TYPE: 2)
[rl0-3] RADIUS: RadiusGetParams: (RAD_FRAMED_PROTOCOL: 1)
[rl0-3] RADIUS: RadiusGetParams: RAD_FRAMED_IP_ADDRESS: 1.2.3.4
[rl0-3] RADIUS: RadiusGetParams: RAD_FRAMED_IP_NETMASK: 255.255.255.255 (/32)
[rl0-3] RADIUS: RadiusGetParams: (RAD_FRAMED_ROUTING: 3)
[rl0-3] RADIUS: RadiusGetParams: (RAD_FILTER_ID: std.ppp)
[rl0-3] RADIUS: RadiusGetParams: RAD_FRAMED_MTU: 1492
[rl0-3] RADIUS: RadiusGetParams: (RAD_FRAMED_COMPRESSION: 1)
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_TABLE: 1=11.1.11.1
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_TABLE: 1=1.2.3.4
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_PIPE: 1=bw 10Kbyte/s
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_PIPE: 5=bw 20Kbyte/s
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_RULE: 1=pipe %p1 all from any to table\(%t1\) in
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_RULE: 2=pipe %p5 all from table\(%t1\) to any out
[rl0-3] RADIUS: RadiusGetParams: RAD_MPD_RULE: 100=allow all from any to any
[rl0-3] AUTH: RADIUS returned authenticated
[rl0-3] AUTH: Auth-Thread finished normally
[rl0-3] CHAP: ChapInputFinish: status authenticated
Reply message: Welcome
Also, mein Erstes, aber momentan eher kleinstes Problem wird sein, dass ich den Dialup Admin etwas umschreiben muss (PHP4) ... das kann ich jedoch vorerstmal vernachlässigen, denn dafür habe ich einen Freund mit dem ich das zusammen lösen kann - kann selbst nämlich _noch_ kein PHP
.
Soweit sogut ... nun habe ich nach gestrigen weiteren Tests aber noch etwas doofes feststellen müssen
(*mist*)
Erst mal die positive Nachricht:
Die Bandbreitenlimitierung mit Dummynet ist doch nicht so ungenau wie zuerst angenommen ... ;-)
Schlechte Nachricht:
Die Bandbreite wird Limitiert, aber nur für den Traffic der direkt zwischen PPPoE Client an PPPoE Server stattfindet. Internet-Traffic der hingegen noch über natd geht wird einfach volle Speed durchgelassen ... Das ist in meinem Falle natürlich ein Griff ins Klo
, denn ich möchte den PPPoE Clients den Internet-Hahn ja drosseln
Folgendes gibt mir ipfw list aus, wenn ich mit einem PPPoE Client verbunden bin der auch erfolgreich die IPFW Regeln bekommen hat:
Code:
[root@wisp ~]# ipfw list
00050 divert 8668 ip4 from any to any via rl0
00100 allow ip from any to any via lo0
00100 divert 8668 ip from any to any in via rl0
00110 divert 8668 ip from any to any out via rl0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
10000 pipe 10000 ip from any to table(32) in via ng0
10001 pipe 10001 ip from table(32) to any out via ng0
10002 allow ip from any to any via ng0
65000 allow ip from any to any
65535 allow ip from any to any
[root@wisp ~]#
und so siehts dann wieder aus wenn er wieder disconected ist:
Code:
[root@wisp ~]# ipfw list
00050 divert 8668 ip4 from any to any via rl0
00100 allow ip from any to any via lo0
00100 divert 8668 ip from any to any in via rl0
00110 divert 8668 ip from any to any out via rl0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
65000 allow ip from any to any
65535 allow ip from any to any
[root@wisp ~]#
du siehst also:
Code:
10000 pipe 10000 ip from any to table(32) in via ng0
10001 pipe 10001 ip from table(32) to any out via ng0
10002 allow ip from any to any via ng0
die drei Regeln sind erfolgreich vorhanden und arbeiten auch, ABER eben nich für Traffic über natd ... ;/
Meine Frage jetzt also an dich als IPFW & DUMMYNET Speziallisten
: Was fehlen dem für Regelsätze um _sämtlichen_ Traffic zu drosseln?
Vielen Dank, Diirc, ich weiß deine Hilfen wirklich sehr zu schätzen!
Liebe Grüße,
Leander