Nachdem ich nun schon seit Jahren einen IPv6-Tunnel zu meinem ‚zuHause‘-Netz offen habe und nun außerdem einen externen Web-Server besitze, der IPv6 direkt bedienen kann, muss ich doch mal probieren, auch über IPv6 zu surfen.
Deshalb wollte ich heute mal meinen squid-Proxy das IPv6 beibringen. Bisher lauschte er nämlich nur an den IPv4-Adressen und benutzte sie auch nur für Abfragen.
Wichtig ist allerdings, dass man mindesten einen Squid in der Version 3.1 benutzt. Bei mir kein Problem, ich habe ja schon seit längerem das squid3-Paket auf meinem Proxy installiert. Dennoch lauscht er nur am IPv4:

root@proxy:~# squid3 -v
Squid Cache: Version 3.1.6
configure options: ‚–build=i486-linux-gnu‘ ‚–prefix=/usr‘ ‚–includedir=${prefix}/include‘ ‚–mandir=${prefix}/share/man‘ ‚–infodir=${prefix}/share/info‘ ‚–sysconfdir=/etc‘ ‚–localstatedir=/var‘ ‚–libexecdir=${prefix}/lib/squid3‘ ‚–disable-maintainer-mode‘ ‚–disable-dependency-tracking‘ ‚–disable-silent-rules‘ ‚–srcdir=.‘ ‚–datadir=/usr/share/squid3‘ ‚–sysconfdir=/etc/squid3‘ ‚–mandir=/usr/share/man‘ ‚–with-cppunit-basedir=/usr‘ ‚–enable-inline‘ ‚–enable-async-io=8‘ ‚–enable-storeio=ufs,aufs,diskd‘ ‚–enable-removal-policies=lru,heap‘ ‚–enable-delay-pools‘ ‚–enable-cache-digests‘ ‚–enable-underscores‘ ‚–enable-icap-client‘ ‚–enable-follow-x-forwarded-for‘ ‚–enable-auth=basic,digest,ntlm,negotiate‘ ‚–enable-basic-auth-helpers=LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,DB,POP3,getpwnam,squid_radius_auth,multi-domain-NTLM‘ ‚–enable-ntlm-auth-helpers=smb_lm,‘ ‚–enable-digest-auth-helpers=ldap,password‘ ‚–enable-negotiate-auth-helpers=squid_kerb_auth‘ ‚–enable-external-acl-helpers=ip_user,ldap_group,session,unix_group,wbinfo_group‘ ‚–enable-arp-acl‘ ‚–enable-esi‘ ‚–disable-translation‘ ‚–with-logdir=/var/log/squid3‘ ‚–with-pidfile=/var/run/squid3.pid‘ ‚–with-filedescriptors=65536‘ ‚–with-large-files‘ ‚–with-default-user=proxy‘ ‚–enable-linux-netfilter‘ ‚build_alias=i486-linux-gnu‘ ‚CFLAGS=-g -O2 -g -Wall -O2‘ ‚LDFLAGS=‘ ‚CPPFLAGS=‘ ‚CXXFLAGS=-g -O2 -g -Wall -O2‘ –with-squid=/tmp/buildd/squid3-3.1.6
root@proxy:~# lsof -i :3128
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
squid3 19926 proxy 17u IPv4 562663210 TCP *:3128 (LISTEN)
root@proxy:~# host proxy
proxy.dom.de has address 192.168.31.2
proxy.dom.de has IPv6 address 2001:6ff:c:3105::1
root@proxy:~#

Ein Problem mit dem fehlenden IPv6 war offensichtlich die squid.conf-Zeile …

51
52
53
...
http_port 3128 transparent
...

… aber auch ein ändern der Zeile auf einen IPv6-Host brachte keine Besserung, sondern nur eine Fehlermeldung.

51
52
53
54
...
#http_port 3128 transparent
http_port proxy.dom.de:3128 transparent
...

Squid3 hat scheinbar ein Problem mit IPv6-Adressen und dem Schalter ‚transparent‘ in der http_port-Zeile.:

# /etc/init.d/squid3 restart
2011/09/22 13:45:13| http(s)_port: IPv6 addresses cannot be transparent (protocol does not provide NAT)[2001:6ff:c:3105::1]:3128
FATAL: Bungled squid.conf line 53: http_port proxy.dom.de:3128 transparent
Squid Cache (Version 3.1.6): Terminated abnormally.

#

Erst als ich in der /etc/squid3/squid.conf jeden (nötigen) http_port in einer extra Zeile konfiguriert hatte, klappte es mit den IPv6-Adressen:

51
52
53
54
55
56
57
58
59
60
 ...
 #http_port 3128 transparent
 http_port 192.168.31.2:3128 transparent
 http_port 127.0.0.1:3128 transparent
 http_port [2001:6ff:c:3105::1]:3128
 http_port [::1]:3128
 ...
 cache_peer 127.0.0.1 parent 8080 0 no-query no-digest no-netdb-exchange default
 ...
 #

root@proxy:~# lsof -nPi :3128
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
squid3 32340 proxy 18u IPv4 563238254 TCP 192.168.31.2:3128 (LISTEN)
squid3 32340 proxy 19u IPv4 563238255 TCP 127.0.0.1:3128 (LISTEN)
squid3 32340 proxy 20u IPv6 563238256 TCP [2001:6ff:c:3105::1]:3128 (LISTEN)
squid3 32340 proxy 21u IPv6 563238257 TCP [::1]:3128 (LISTEN)
root@proxy:~#

Einen Eintrag den ich auf dem Squid-Wiki gefunden hatte, machte ich dann noch in der /etc/squid3/squid.conf:

2200
2201
2202
2203
2204
2205
 ...
 acl to_ipv6 dst ipv6
 
 tcp_outgoing_address 2001:6ff:c:3105::1 to_ipv6
 tcp_outgoing_address 192.168.31.2 !to_ipv6
 ...

Leider erreichte ich danach keine Web-Seite mehr, die auf einem IPv6-Webserver lag, – Das war ja nicht gerade was ich erreichen wollte. Es stellte sich heraus, dass der havp nicht damit klar kam, dass alle Pakete bei ihm von der IP 192.168.31.2 ankamen (statt von der 127.0.0.1). Warum nur die Pakete an IPv6-Hosts ein Problem darstellten, ist mir zwar nicht klar, aber als ich die beiden tcp_outgoing_address-Einträge wieder löschte, war alles gut. :?: Womöglich wäre bestimmt auch als Alternative, einfach mal den HAVP auch IPv6 sprechen zu lassen, aber irgendwie wollte das nicht klappen. Es gab immer Fehlermeldungen ala „Invalid Config: Invalid BIND_ADDRESS Exiting.. „. Und auch Onkel Google schweigt sich leider zum Thema „havp und IPv6“ standhaft aus. Aber im Moment ist das ja noch kein großes Problem.
– Und auf meinem Webserver sehe ich jetzt auch meine Requests mit einer IPv6-Adresse im log-File. :yippy:
Abzuwarten bleibt nun noch, ob das Surfen durch den SixXS-Tunnel dann auch wirklich Spaß macht oder ob ich mangels Geschwindigkeit lieber noch etwas warte.