Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ISATAP 配置需要更新 #1

Open
bigeagle opened this issue Mar 11, 2016 · 30 comments
Open

ISATAP 配置需要更新 #1

bigeagle opened this issue Mar 11, 2016 · 30 comments

Comments

@bigeagle
Copy link
Member

如题

@Blaok
Copy link
Contributor

Blaok commented Mar 11, 2016

在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
Copy link
Contributor

Blaok commented Mar 11, 2016

在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

@bigeagle
Copy link
Member Author

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 站。

@shankerwangmiao
Copy link
Member

并不全是这样。

如果系统标准的网络连接中,没有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 #1 (comment).

@puxxustc
Copy link

下面两个命令可以解决 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 了

@bigeagle
Copy link
Member Author

@xiaoxiaopu 应该是 ifconfig ?

@puxxustc
Copy link

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

@bigeagle
Copy link
Member Author

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

@shankerwangmiao
Copy link
Member

没了解过 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 #1 (comment)

@puxxustc
Copy link

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

@bigeagle
Copy link
Member Author

@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

@puxxustc
Copy link

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

@bigeagle
Copy link
Member Author

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

@puxxustc
Copy link

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

@bigeagle
Copy link
Member Author

233

@xiadaorobinhood
Copy link

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

@bigeagle
Copy link
Member Author

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

@bigeagle
Copy link
Member Author

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

@puxxustc
Copy link

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

@bigeagle
Copy link
Member Author

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

@xiadaorobinhood
Copy link

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

@puxxustc
Copy link

@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

@bigeagle
Copy link
Member Author

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

@xiadaorobinhood
Copy link

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

@bigeagle
Copy link
Member Author

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

@xiadaorobinhood
Copy link

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

@alick
Copy link
Contributor

alick commented Apr 14, 2016

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

@alick
Copy link
Contributor

alick commented Apr 14, 2016

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

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

@gaotongsh
Copy link

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

@bigeagle
Copy link
Member Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants