SQUID : Socket failure : (99) cannot assign requested adress

rebijours, (LEnny 2.6.26-686)

[size=150]voici schematiquement le contexte[/size]

10.0.0.1---10.0.0.2/TAB:ADMIN-SQUID1:8080/172.16.1.1---172.16.1.254
ROUTEUR.........ETH1.......PROXI.........ETH5............LAN CLIENT

[size=150]le contexte IPTABLE[/size]

[size=85]*nat
:PREROUTING ACCEPT [264:30767]
:POSTROUTING ACCEPT [72:4698]
:OUTPUT ACCEPT [134:9652]
-A PREROUTING -s 172.16.1.0/24 -d ! 172.16.1.1/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
-A PREROUTING -s 172.16.1.0/24 -d ! 172.16.1.1/24 -p udp -m udp --dport 80 -j REDIRECT
-A POSTROUTING -o eth1 -j MASQUERADE
*mangle
:PREROUTING ACCEPT [3132:288828]
:INPUT ACCEPT [3132:288828]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2284:829798]
:POSTROUTING ACCEPT [2284:829798]
-A PREROUTING -s 172.16.1.0/24 -d ! 172.16.1.1/32 -j MARK --set-xmark 0x1/0xffffffff
*Filter
-A FORWARD -o eth1 -p tcp -m tcp -m multiport --sports 135,137,138,139,445,515,1433 -j DROP
-A FORWARD -o eth1 -p udp -m udp -m multiport --sports 135,137,138,139,445,515,1434 -j DROP
[/size]

[size=150]voici le contexte ip route[/size]

#~/>ip route
10.0.0.0/30 dev eth1  proto kernel  scope link  src 10.0.0.2
172.16.1.0/24 dev eth5  proto kernel  scope link  src 172.16.1.1
default via 10.0.0.1 dev eth1
#~/>ip route list table ADMIN
10.0.0.0/30 dev eth1  scope link  src 10.0.0.2
172.16.3.0/24 dev eth7  scope link
172.16.1.0/24 dev eth5  scope link
default via 10.0.0.1 dev eth1

[size=150]voici le contexte ip rule[/size]

0:      from all lookup local
32764:  from all fwmark 0x1 lookup ADMIN
32765:  from 10.0.0.2 lookup ADMIN
32766:  from all lookup main
32767:  from all lookup default

je cherche à imposer à squid le passage de ses requêtes http via un routeur précis. Pour cela j’ai utilisé les options tcp_outgoing_address 10.0.0.1 ACL_CLients-net-172-16-1

avec cette config, j’ai presque réussi mon coup, MAIS Squid apparement à un probleme.

1/ en effet, du proxi, et de la machine cliente les pings locaux et vers le web (que ce soit format IP, ou DNS) fonctionnent tres bien.

2/ par contre la consultation de page web a partir du client-172.16.1.x demeure un probleme:

ERROR
The requested URL could not be retrieved
-----------------------------------------------
While trying to retrieve the URL www.google.fr
 * SOCKET FAILURE
 (99) Cannot assign requested address
 Squid is unable to create a tcp socket, presumably to exessive load
-------------------------------------------------
Générated by SQUID 2.7.STABLE3

et pourtant donc du client:

#~/>nslookup www.google.fr
Server:         unknown
Address:        172.16.1.1#53
Non-authoritative answer:
www.google.fr   canonical name = www.google.com.
Address: 209.85.227.104, 209.85.227.105, 209.85.227.106, 209.85.227.147, 209.85.227.99, 209.85.227.103
Aliases = www.google.com  canonical name = www.l.google.com.

ce n’est donc pas un probleme avec iptables, pas non plus avec le dns, ni la communication vers le web… car quand je supprime les redirections du port 80 vers 8080(proxy), le trafic web passe du client vers le net en forwarding (G pas installé apache) sans aucun soucis et les page s’affichent de suite.

ca viens donc de squid… mais d’ou ??? Zavez une idée ?

T’a jeté un oeil dans les logs de squid et du système : cache.log et /var/log/messages ?

voici le cache.log du dernier demarrage de squid

2010/05/27 10:00:15| Starting Squid Cache version 2.7.STABLE3 for i386-debian-linux-gnu...
2010/05/27 10:00:15| Process ID 4488
2010/05/27 10:00:15| With 1024 file descriptors available
2010/05/27 10:00:15| Using epoll for the IO loop
2010/05/27 10:00:15| parseEtcHosts: /etc/hosts: (2) No such file or directory
2010/05/27 10:00:15| DNS Socket created at 0.0.0.0, port 58872, FD 6
2010/05/27 10:00:15| Adding nameserver 127.0.0.1 from squid.conf
2010/05/27 10:00:15| User-Agent logging is disabled.
2010/05/27 10:00:15| Referer logging is disabled.
2010/05/27 10:00:15| logfileOpen: opening log /var/log/squid/access.log
2010/05/27 10:00:15| Unlinkd pipe opened on FD 11
2010/05/27 10:00:15| Swap maxSize 2097152 KB, estimated 161319 objects
2010/05/27 10:00:15| Target number of buckets: 8065
2010/05/27 10:00:15| Using 8192 Store buckets
2010/05/27 10:00:15| Max Mem  size: 1024000 KB
2010/05/27 10:00:15| Max Swap size: 2097152 KB
2010/05/27 10:00:15| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec
2010/05/27 10:00:15| logfileOpen: opening log /var/log/squid/store.log
2010/05/27 10:00:15| Rebuilding storage in /var/spool/squid (CLEAN)
2010/05/27 10:00:15| Using Least Load store dir selection
2010/05/27 10:00:15| Set Current Directory to /var/spool/squid
2010/05/27 10:00:15| Loaded Icons.
2010/05/27 10:00:15| Accepting transparently proxied HTTP connections at 172.16.1.1, port 8080, FD 13.
2010/05/27 10:00:15| Accepting ICP messages at 0.0.0.0, port 3130, FD 14.
2010/05/27 10:00:15| HTCP Disabled.
2010/05/27 10:00:15| WCCP Disabled.
2010/05/27 10:00:15| Configuring 172.16.2.1 Sibling 172.16.2.1/8081/3131
2010/05/27 10:00:15| Ready to serve requests.
2010/05/27 10:00:15| Done reading /var/spool/squid swaplog (99 entries)
2010/05/27 10:00:15| Finished rebuilding storage from disk.
2010/05/27 10:00:15|        99 Entries scanned
2010/05/27 10:00:15|         0 Invalid entries.
2010/05/27 10:00:15|         0 With invalid flags.
2010/05/27 10:00:15|        99 Objects loaded.
2010/05/27 10:00:15|         0 Objects expired.
2010/05/27 10:00:15|         0 Objects cancelled.
2010/05/27 10:00:15|         0 Duplicate URLs purged.
2010/05/27 10:00:15|         0 Swapfile clashes avoided.
2010/05/27 10:00:15|   Took 0.3 seconds ( 381.6 objects/sec).
2010/05/27 10:00:15| Beginning Validation Procedure
2010/05/27 10:00:15|   Completed Validation Procedure
2010/05/27 10:00:15|   Validated 99 Entries
2010/05/27 10:00:15|   store_swap_size = 628k
2010/05/27 10:00:16| commBind: Cannot bind socket FD 16 to 10.0.0.1:0: (99) Cannot assign requested address
2010/05/27 10:00:16| storeLateRelease: released 0 objects
2010/05/27 10:00:23| commBind: Cannot bind socket FD 16 to 10.0.0.1:0: (99) Cannot assign requested address
2010/05/27 10:00:23| commBind: Cannot bind socket FD 16 to 10.0.0.1:0: (99) Cannot assign requested address

pour info supplémentaire, et comme le montre le log… c’est TCP_OUTGOING_ADDRESS qui ne fonctionne pas, sans cette option tout fonctionne bien, mais prend le route par defaut de la table main, ce qui ne m’arrange pas quand je vais devoir transposer ca pour la seconde connexion (table PEDA ) a destination d’un autre routeur.

l’erreur n’apparait pas de suite sur le client internet, apres trois refresh infructueux (page inaccessible) il daigne enfin afficher le socket failure.

est ce que ce tcp_outgoing est vraiment prévu pour spécifier une passerelle internet ?

bon, apparement yavais un beans keke part.

  • utilisé “tcp_outgoing_address 10.0.0.1” sans spécifier de client
  • ajouté un route par defaut en post-up au demmarrage du réseau, pasque juqsue là je l’ajoutait a posteriori et a mano pour les tests…
  • J’ai redemarré le serveur

    …noooonnnnnn!..

    [size=200]CA MARCHE![/size] :041 :079

mais j’ai toujours pas compris pourquoi… :017

le systeme d’outgoing de squid doit il être mis en place avant l’arrivée en lisse d’un autre programme qui le gêne ensuite ?

le lendemain je, relance la machine, et rien ne va plus… en effet malgré le paramètre tcp_outgoing_address , squid utilise encore la passerelle par defaut… et du coup ca passe même quand la passerelle spécifié n’existe pas (2eme squid / TABLE PEDA/172.16.2.0/24).
Bref appres avoir corrigé de grave troubles iptables, en se qui concerne le marquage de paquet. PUIS, apres avoir vu sur une ligne dans un message / tout le web google… l a haine…
-> quand sur cache squid ils parlent de gateway, c’est pas l’adresse de la passerelle internet ni du routeur… c’est l’adresse de l’interface de notre serveur à nous qu’il faut donner à squid…en locurrence ici c’est
[size=150]TCP_OUTGOING_ADDRESS 10.0.0.2[/size]
et pas 10.0.0.1… :013

et maintenant je comprend un peut mieux le message d’erreur. c’est sûr si il essaye d’ouvrir un socket sur un interface qui n’appartient pas au serveur qui abrite squid… y risque pas de réussir à l’ouvrir se foutu socket…

bref maintenant avec ces petites modifs… [size=150]CA MAAAAAARCHE ENFIN[/size]

jespere avoir éclairé les futurs bloqués comme moi.