Merhaba
Uzun zaman önce Hurricane Electric (HE) sayesinde IPv6 çalışmaları yapmıştım.
Bu çalışmalar sonunda Hurricane Electiric IPv6 sertifikası veriyor.
Bizde nacizhane sage sertifikasına sahip olduk. Saolsun taaa oralardan IPv6 baskılı t-shirt yolladılar.
Uzatmadan başlayalım.
Bu çalışma sayesinde Linux üzerinde IPv6 destekli bir yönlendiriciye sahip oluyoruz ve iç ağda da IPv6 destekli sunucular kurup dünyaya açabiliyoruz.
Bu şekilde Geçiş öncesi IPv6 testleri yapabiliriz ve IPv6 bilgimizi geliştirebiliriz.
Bunun için önce HE ile tunnel oluşturulması gerekiyor.
Yani IPv4 üzerinden tünel kurulup bunun üzerinden IPv6 trafiğini HE’ye route edebiliyoruz.
Bende bu işlemleri otomatik olarak yapacak basit bir script yazmıştım. Bu script’i sizinle paylaşıyorum.
Ayarlarından bahsedeyim biraz.
#Tunnel Interface Name — Tunnel oluştuğunda ethernet adı olarak gözükecek isim.
TUN=”6to4″
#Physical Lan interface Name — İç ağda IPv6 kullanabilmek için iç network’e bakan ethernet adı yazılır.
PHYSDEV=”eth2″
#Information from the “Tunnel Details” page — Tunel bilgileri
#Server IPv4 Tunnel Address — HE tarafından size verilen tunel IP adresi
SERVER_v4=”216.66.80.30″
#Server IPv6 Tunnel Address — HE tarafından verilen ve HE tarafındaki IPv6 adresi.
SERVER_v6=”2001:db8:1f0a:d99::1″
#Wan interface IPv4 Address — Linux yapılandırması, yani sizin taraf. HE ile tünel kuracağınız Dış Ethernet (Internete çıkan Internet) portun üzerindeki IP adresi.
CLIENT_v4=”1.1.1.1″
#Lan interface IPv6 adress — HE tarafından size verilen ve Linux üzerinde tunel’e tanımlayacağınız IPv6 adresi.
CLIENT_v6=”2001:db8:1f0a:d99::2″
# if you have a /48 —- Eğer HE’den /48 prefix’li bir network’ünüz var ise onu kullanmak için bu alana IPv6 adresinizi yazıp aktif etmek için “0” değerini “1” yapın.
ROUTED_48_EN=”0″ #yes/no (1/0)
ROUTED_48=”2001:db8:7442::1″
ROUTED_64=”2001:db8:1f0b:d99::1″ — HE tarafından verilen /64 prefix’li IPv6 adresiniz’i buraya tanımlayın.
#Update dynamic ipv4 adress tunnelbroker.net — Bu alana HE hesabınızın bilgilerini yazın ve oluşturduğunuz tünel’in ID’sini (numarası) yazın
USERNAME=”username”
PASSWORD=”password”
TUNNELID=”tunnel_id”
Önemli:
-HE'nin tüneli kurmak için sizin DIŞ IP adresinize Ping atabilmesi gerekiyor. Aksi halde tünel kurmuyor.
Bilgi:
- Bu script Dış IP adresiniz Dinamik olsa da çalışır.
-IPTables Firewall kurallarını basit olarak oluşturdum. Detaylandırmak isterseniz script'i istediğiniz gibi düzenleyebilirsiniz.
Bir sorun olursa mesaj alanına yazın.
İşte script. Umarım faydası olur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
#!/bin/bash # Fatih USTA - info@fatihusta.com PROGNAME=`basename $0` PROGPATH=`pwd` #Tunnel Interface Name TUN="6to4" #Physical Lan interface Name PHYSDEV="eth2" #Information from the "Tunnel Details" page #Server IPv4 Tunnel Address SERVER_v4="216.66.80.30" #Server IPv6 Tunnel Address SERVER_v6="2001:db8:1f0a:d99::1" #Wan interface IPv4 Address CLIENT_v4="1.1.1.1" #Lan interface IPv6 adress CLIENT_v6="2001:db8:1f0a:d99::2" # if you have a /48 ROUTED_48_EN="0" #yes/no (1/0) ROUTED_48="2001:db8:7442::1" ROUTED_64="2001:db8:1f0b:d99::1" #Update dynamic ipv4 adress tunnelbroker.net USERNAME="username" PASSWORD="password" TUNNELID="tunnel_id" UPDATE_URL="https://$USERNAME:$PASSWORD@ipv4.tunnelbroker.net/nic/update?hostname=$TUNNELID" #FW IPT=`which iptables` IP6T=`which ip6tables` checktunnel() { tunnelcheck=`ifconfig | grep $TUN | awk '{print $1}'` if [ "$TUN" == "$tunnelcheck" ]; then echo "tunnel already exists" exit 2 fi } testipv6internet () { echo -n "Testing IPv6 Tunnel Server: " PINGSRV=`ping6 $SERVER_v6 -c 1` SRV=`echo $?` if [ "$SRV" != "0" ]; then echo "FAILED" else echo "OK" fi echo -n "Testing IPv6 Internet: " PINGINT=`ping6 2a00:1450:4013:c00::67 -c 1` INT=`echo $?` if [ "$INT" != "0" ]; then echo "FAILED" else echo "OK" fi } check_internet() { echo -n "Testing Internet: " CHCKINT=`ping google.com -c 1 2>> /dev/null` v4INT=`echo $?` if [ "$v4INT" != "0" ]; then echo "Failed to internet connection" exit 1 else echo "OK" fi } updateipv4() { echo -n "Update Dynamic IPv4 Adress: " IPv4DYN=`curl -s "$UPDATE_URL"` DYN=`echo $?` if [ "$DYN" != "0" ]; then echo "FAILED" echo "$PROGNAME Update Dynamic IPv4 Adress: FAILED" | logger else echo "$PROGNAME Update Dynamic IPv4 Adress: OK" | logger echo "OK" fi } check_ip6tables() { if [[ -f $IP6T ]]; then check_IP6T=`service ip6tables status` check_IP6T_stats=`echo $?` echo $check_IP6T_stats fi } add_IP4T_and_IP6T_InterfaceRules() { if [[ `check_ip6tables` == "0" ]]; then $IP6T -I INPUT -s $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -I OUTPUT -s $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -I FORWARD -s $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -I INPUT -d $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -I OUTPUT -d $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -I FORWARD -d $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 fi $IPT -I INPUT -s $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -I OUTPUT -s $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -I FORWARD -s $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -I INPUT -d $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -I OUTPUT -d $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -I FORWARD -d $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 } delete_IP4T_and_IP6T_InterfaceRules() { if [[ `check_ip6tables` == "0" ]]; then $IP6T -D INPUT -s $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -D OUTPUT -s $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -D FORWARD -s $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -D INPUT -d $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -D OUTPUT -d $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 $IP6T -D FORWARD -d $CLIENT_v6/64 -j ACCEPT >/dev/null 2>&1 fi $IPT -D INPUT -s $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -D OUTPUT -s $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -D FORWARD -s $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -D INPUT -d $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -D OUTPUT -d $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 $IPT -D FORWARD -d $CLIENT_v4 -j ACCEPT >/dev/null 2>&1 } start() { modprobe ipv6 2>> /dev/null echo -n "Starting he.net IPv6 tunnel: " ip tunnel add $TUN mode sit remote $SERVER_v4 local $CLIENT_v4 ttl 255 2>> /dev/null ip link set $TUN up 2>> /dev/null ip -6 addr add $CLIENT_v6/64 dev $TUN 2>> /dev/null ip -6 ro add default via $SERVER_v6 dev $TUN 2>> /dev/null ip -6 addr add $ROUTED_64/64 dev $PHYSDEV 2>> /dev/null if [ $ROUTED_48_EN == "1" ]; then ip -6 addr add $ROUTED_48/48 dev $PHYSDEV 2>> /dev/null fi #ip -f inet6 addr echo "Done." #add cron jobs update ipv4 dynamic adress echo 'MAILTO=""' > /etc/cron.d/$PROGNAME.cron echo "*/5 * * * * root $PROGPATH/$PROGNAME updateipv4" >> /etc/cron.d/$PROGNAME.cron echo "*/5 * * * * root $PROGPATH/$PROGNAME start" >> /etc/cron.d/$PROGNAME.cron CRON=`/etc/init.d/crond restart 2>> /dev/null` echo 1 > /proc/sys/net/ipv6/conf/all/forwarding echo 1 > /proc/sys/net/ipv6/conf/default/forwarding add_IP4T_and_IP6T_InterfaceRules } stop() { echo -n "Stopping he.net IPv6 tunnel: " delete_IP4T_and_IP6T_InterfaceRules ip -6 addr delete $ROUTED_64/64 dev $PHYSDEV 2>> /dev/null ip -6 addr delete $ROUTED_48/48 dev $PHYSDEV 2>> /dev/null ip link set $TUN down 2>> /dev/null ip tunnel del $TUN 2>> /dev/null DELTUN=`echo $?` if [ "$DELTUN" != "0" ]; then echo "FAILED. No is up tunnel" else echo "Done." fi rm -rf /etc/cron.d/$PROGNAME.cron CRON=`/etc/init.d/crond restart 2>> /dev/null` echo 0 > /proc/sys/net/ipv6/conf/all/forwarding echo 0 > /proc/sys/net/ipv6/conf/default/forwarding } restart() { stop sleep 1 checktunnel check_internet updateipv4 start testipv6internet } case "$1" in start) checktunnel check_internet updateipv4 start testipv6internet ;; stop) stop ;; restart) restart ;; conntest) testipv6internet ;; updateipv4) check_internet updateipv4 ;; *) echo "Usage" echo "bash $PROGNAME <start|stop|restart|conntest|updateipv4>" esac |