ipv6.tsinghua.edu.cn icon indicating copy to clipboard operation
ipv6.tsinghua.edu.cn copied to clipboard

ISATAP 配置需要更新

Open bigeagle opened this issue 8 years ago • 30 comments

如题

bigeagle avatar Mar 11 '16 10:03 bigeagle

在OpenWRT上:

root@OpenWRT:~# cat /etc/init.d/isatap
#!/bin/sh /etc/rc.common
START=95
V4_REMOTE="166.111.21.1"
V6_REMOTE="2402:f000:1:1501:200:5efe"
V6_LOCAL="fe80::200:5efe"
IFACE6=sit1
start() {
    sleep 1
    . /lib/functions/network.sh; network_get_ipaddr IP4 wan;
    ip tunnel add $IFACE6 mode sit remote $V4_REMOTE local $IP4
    ip link set dev $IFACE6 up
    ip -6 addr add $V6_LOCAL:$IP4/64 dev $IFACE6
    ip -6 addr add $V6_REMOTE:$IP4/64 dev $IFACE6
    ip -6 addr del fe80::$IP4/64 dev $IFACE6
    ip -6 route add default via $V6_REMOTE:$V4_REMOTE
}
stop() {
    ip tunnel del $IFACE6
}
root@OpenWRT:~# cat /etc/hotplug.d/iface/95-isatap
#!/bin/sh
[ ifup = "$ACTION" ] && {
    [ wan = "$INTERFACE" ] && {
        /etc/init.d/isatap start
    }
}
[ ifdown = "$ACTION" ] && {
    [ wan = "$INTERFACE" ] && {
        /etc/init.d/isatap stop
    }
}

另外需要

chmod +x /etc/init.d/isatap
chmod +x /etc/hotplug.d/iface/95-isatap
/etc/init.d/isatap enable

Blaok avatar Mar 11 '16 10:03 Blaok

在Arch Linux上源里的isatapd自动配置有时候会抽风。

blaok@arch ~%cat /usr/local/bin/isatapd
#!/bin/sh
IFACE4=eth0
IFACE6=sit1
V4_REMOTE="166.111.21.1"
V6_REMOTE="2402:f000:1:1501:200:5efe"
V6_LOCAL="fe80::200:5efe"

case $1 in
    stop)
        if [ -e "$2" ]
        then
            kill `cat $2`
            rm $2
        else
            killall `basename $0`
        fi
        ip -6 route del default via $V6_REMOTE:$V4_REMOTE
        ip tunnel del $IFACE6
        ;;
    start)
        while true
        do
            IP4=`ip addr show dev $IFACE4 | sed -e's/^.*inet \([^ ]*\)\/.*$/\1/;t;d'`
            IP4_TMP=`echo $IP4|sed -e 's/\./ /g'`
            CURR_IP4_HEX=`printf '%02x%02x:%02x%02x' $IP4_TMP`
            PREV_IP4_HEX=`ip -6 addr show dev $IFACE6 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d' | egrep -o '[0-9a-f]{4}:[0-9a-f]{4}$' -m 1`
            if [ "$CURR_IP4_HEX" != "$PREV_IP4_HEX" ] && [ ! -e "$CURR_IP4_HEX" ]
            then
                ip -6 route del default via $V6_REMOTE:$V4_REMOTE
                ip tunnel del $IFACE6
                sleep 1s
                ip tunnel add $IFACE6 mode sit remote $V4_REMOTE local $IP4
                ip link set dev $IFACE6 up
                ip -6 addr add $V6_LOCAL:$IP4/64 dev $IFACE6
                ip -6 addr add $V6_REMOTE:$IP4/64 dev $IFACE6
                ip -6 addr del fe80::$IP4/64 dev $IFACE6
                ip -6 route add default via $V6_REMOTE:$V4_REMOTE dev $IFACE6
            else
                sleep 1s
            fi
        done &
        if [ ! -e "$2" ]
        then
            echo $!|tee $2>/dev/null
        fi
        ;;
    *)
        echo "Usage:"
        echo "    $0 start [pidfile]"
        echo "    $0 stop [pidfile]"
esac
blaok@arch ~%cat /etc/systemd/system/isatapd.service
[Unit]
Description=ISATAP Tunnel Daemon
After=network.target

[Service]
Type=forking
User=root
PIDFile=/run/isatapd.pid
ExecStart=/usr/local/bin/isatapd start /run/isatapd.pid
ExecStop=/usr/local/bin/isatapd stop /run/isatapd.pid

[Install]
WantedBy=multi-user.target

当然

sudo chmod +x /usr/local/bin/isatapd
sudo systemctl daemon-reload
sudo systemctl enable isatapd
sudo systemctl start isatapd

Blaok avatar Mar 11 '16 11:03 Blaok

OS X 参考方法

#!/bin/sh 
#清除IPV6路由表 
sudo route delete -inet6 default  
sudo ifconfig gif0 destroy
EN0_IP=`ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'` 
EN1_IP=`ifconfig en1 | grep inet | grep -v inet6 | awk '{print $2}'`  
if [ -n “$EN0_IP” ]; then 
    LOCAL_IP=$EN0_IP 
else 
    LOCAL_IP=$EN1_IP 
fi  
if [ -n “$LOCAL_IP” ]; then 
    sudo ifconfig gif0 create
    ifconfig gif0 tunnel $LOCAL_IP 166.111.21.1 
    ifconfig gif0 inet6 2402:f000:1:1501:200:5efe:$LOCAL_IP prefixlen 64 
    route add -inet6 default 2402:f000:1:1501::1 
fi

用 safari 开 ipv6.tsinghua.edu.cn 一定会返回 IPv4 的。Mac OS X Lion 之后使用 RFC 6555 的双栈快速 Fallback 进行链路选择,实际实现的时候是选择延迟小的那条线路,显然到 ipv6.tsinghua.edu.cn 直接用 IPv4 延迟比较小,所以 safari 无论如何都会选择 IPv4 连接清华的 IPv6 站。

bigeagle avatar Mar 11 '16 11:03 bigeagle

并不全是这样。

如果系统标准的网络连接中,没有v6的连接,那么 safari 会直接使用 v4,这意味着,safari根本不会去查询 AAAA 记录。

例如,假设我在系统设置中关掉了所有的 v6 ,然后用命令行开启了一个 interface 名字是 gif0 。但是这个 gif0 不会出现在系统的网络连接的列表中,因此 safari 不会去查询 AAAA 记录。

本邮件具有数字签名,敬请核对。 王邈 清华大学计算机科学与技术系 电话:+86 130-5186-7712 通信地址:北京市海淀区清华大学紫荆公寓2号楼307A 100084

Please check the digital signature attached with the e-mail. Miao Wang Department of Computer Science and Technology, Tsinghua University Tel.: +86 130-5186-7712 Add.: Room 307A, No.2 Zijing Building, Tsinghua University, Peking. P.R.C. 100084

在 2016年3月11日,19:46,bigeagle [email protected] 写道:

OS X 参考方法

#!/bin/sh #清除IPV6路由表 sudo route delete -inet6 default
sudo ifconfig gif0 destroy EN0_IP=ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}' EN1_IP=ifconfig en1 | grep inet | grep -v inet6 | awk '{print $2}'
if [ -n “$EN0_IP” ]; then LOCAL_IP=$EN0_IP else LOCAL_IP=$EN1_IP fi
if [ -n “$LOCAL_IP” ]; then sudo ifconfig gif0 create ifconfig gif0 tunnel $LOCAL_IP 166.111.21.1 ifconfig gif0 inet6 2402:f000:1:1501:200:5efe:$LOCAL_IP prefixlen 64 route add -inet6 default 2402:f000:1:1501::1 fi 用 safari 开 ipv6.tsinghua.edu.cn 一定会返回 IPv4 的。Mac OS X Lion 之后使用 RFC 6555 的双栈快速 Fallback 进行链路选择,实际实现的时候是选择延迟小的那条线路,显然到 ipv6.tsinghua.edu.cn 直接用 IPv4 延迟比较小,所以 safari 无论如何都会选择 IPv4 连接清华的 IPv6 站。

— Reply to this email directly or view it on GitHub https://github.com/tuna/ipv6.tsinghua.edu.cn/issues/1#issuecomment-195334931.

shankerwangmiao avatar Mar 11 '16 11:03 shankerwangmiao

下面两个命令可以解决 OS X 下 GUI 程序不使用 IPv6 的问题:

sudo ipconfig set gif0 MANUAL-V6 2402:f000:1:1501:200:5efe:$LOCAL_IP 64
sudo route add -inet6 ::/0 -interface gif0

不得不说 OS X 的网络太 buggy 了

puxxustc avatar Mar 24 '16 12:03 puxxustc

@XiaoxiaoPu 应该是 ifconfig ?

bigeagle avatar Mar 24 '16 13:03 bigeagle

@bigeagle 没打错哦,就是 ipconfig,OS X 里才有的

puxxustc avatar Mar 24 '16 13:03 puxxustc

这么牛!那它和 ifconfig gif0 inet6 2402:f000:1:1501:200:5efe:$LOCAL_IP prefixlen 64 冲突吗?

bigeagle avatar Mar 24 '16 13:03 bigeagle

没了解过 ipconfig

本邮件具有数字签名,敬请核对。 王邈 清华大学计算机科学与技术系 电话:+86 130-5186-7712 通信地址:北京市海淀区清华大学紫荆公寓2号楼307A 100084

Please check the digital signature attached with the e-mail. Miao Wang Department of Computer Science and Technology, Tsinghua University Tel.: +86 130-5186-7712 Add.: Room 307A, No.2 Zijing Building, Tsinghua University, Peking. P.R.C. 100084

在 2016年3月24日,21:32,bigeagle [email protected] 写道:

这么牛!那它和 ifconfig gif0 inet6 2402:f000:1:1501:200:5efe:$LOCAL_IP prefixlen 64 冲突吗?

— You are receiving this because you commented. Reply to this email directly or view it on GitHub https://github.com/tuna/ipv6.tsinghua.edu.cn/issues/1#issuecomment-200835197

shankerwangmiao avatar Mar 24 '16 13:03 shankerwangmiao

@bigeagle 它会覆盖 ifconfig 的修改,根据我的经验 ifconfig 虽然给 NIC 设置了 IPv6 地址,OS X 下的 GUI 程序并不吃这一套,但是 ipconfig 设置的就可以。不懂 OS X 的网络到底怎么弄的,各种 dirty hack。

puxxustc avatar Mar 24 '16 13:03 puxxustc

@XiaoxiaoPu 蒽,试试这个脚本对不对?对的话我就更新内容了。

#!/bin/sh 
#清除IPV6路由表 
route delete -inet6 default  
ifconfig gif0 destroy
EN0_IP=`ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'` 
EN1_IP=`ifconfig en1 | grep inet | grep -v inet6 | awk '{print $2}'`  
if [ -n “$EN0_IP” ]; then 
    LOCAL_IP=$EN0_IP 
else 
    LOCAL_IP=$EN1_IP 
fi  
if [ -n "$LOCAL_IP" ]; then 
    ifconfig gif0 create
    ifconfig gif0 tunnel $LOCAL_IP 166.111.21.1 
    ipconfig set gif0 MANUAL-V6 2402:f000:1:1501:200:5efe:$LOCAL_IP 64
    route add -inet6 ::/0 -interface gif0
fi

bigeagle avatar Mar 24 '16 13:03 bigeagle

@bigeagle ifconfig gif0 tunnel $LOCAL_IP 166.111.21.1 这一行可以去掉,别的没问题了。

puxxustc avatar Mar 24 '16 13:03 puxxustc

@XiaoxiaoPu 这行去掉怎么知道 ISATAP server 在哪儿?

bigeagle avatar Mar 24 '16 13:03 bigeagle

@bigeagle 哎,脑残了,忽略忽略🌚。 那就没啥问题了。

puxxustc avatar Mar 24 '16 13:03 puxxustc

233

bigeagle avatar Mar 24 '16 13:03 bigeagle

求助一下,最近的ISATAP的路由不能用了(两人的同时不能用应该不是路由器的锅),但是PC直接连网线可以,是学校的服务器出什么问题了么?还是说配置需要更新了?

xiadaorobinhood avatar Apr 14 '16 14:04 xiadaorobinhood

一直没在路由器背后用过 ISATAP,学校动没动配置我还真不清楚

bigeagle avatar Apr 14 '16 14:04 bigeagle

@xiadaorobinhood 这个问题可能找 [email protected] 更靠谱些。

bigeagle avatar Apr 14 '16 14:04 bigeagle

ISATAP 本质上是 IPv6 over IPv4,过不了 NAT

puxxustc avatar Apr 14 '16 14:04 puxxustc

@XiaoxiaoPu 经验上有人成功过 https://wiki.tuna.tsinghua.edu.cn/IsatapBehindNat

bigeagle avatar Apr 14 '16 14:04 bigeagle

改了一下参数现在可以用了 新的ipv6前缀:2402:f000:1:1501:: ipv4网关:166.111.21.1 原来的59.66的那个网关貌似跪了。。。

xiadaorobinhood avatar Apr 14 '16 14:04 xiadaorobinhood

@bigeagle 查到肥猫的博客 http://blog.felixc.at/2011/07/isatap-behind-nat-windows-xp-auto-config-python-script/ ,看起来是路由器自动转发 IPPROTO_IPV6 的包,使得局域网内有一个机器可以使用 ISATAP 隧道,但是 ISATAP 只有三元组 <IPPROTO_IPV6, SRC, DST>,没有端口的概念,不算 NAT

puxxustc avatar Apr 14 '16 14:04 puxxustc

@xiadaorobinhood 啊,这是好久以前的事情了…… 你看帮助里写的都是这个……

bigeagle avatar Apr 14 '16 15:04 bigeagle

@bigeagle 但是我更早之前搜到的不是这个,而且还能用。。。知道昨天才突然不能用了

xiadaorobinhood avatar Apr 14 '16 15:04 xiadaorobinhood

@xiadaorobinhood 恩,估计是更新了好久了,学校就给停了吧。我记得13年就更新了。

bigeagle avatar Apr 14 '16 15:04 bigeagle

@bigeagle 不管怎样,还是谢谢啦!

xiadaorobinhood avatar Apr 14 '16 15:04 xiadaorobinhood

你们要是能把那台机器找到就好了

alick avatar Apr 14 '16 20:04 alick

我之前不知道有 isatapd,所以自己造了个轮子:https://gist.github.com/alick/e22e2bf49c4ea457d16df2959720aa75

看下里面有没有什么有价值的吧。

alick avatar Apr 14 '16 20:04 alick

OS X 下的 ipv6.tsinghua.edu.cn 上的 isatap 工具无法使用……但这个可以使用 https://github.com/wyq10/mac-isatap 改一下参数即可

gaotongsh avatar Apr 19 '16 06:04 gaotongsh

@tonygaosh 是哪个方面无法使用? wyq10/mac-isatap 看起来是能用的,但是没有使用 ipconfig 来设置,据说桌面程序就不能用了……

bigeagle avatar Apr 19 '16 07:04 bigeagle