Windows下配置IPV6 tinc相关记录

By gyakkun


Why 缘起

搬过来之后, 世界一流大学校园网为数不多的优势之一的——CERNET2的IPV6网络没了。当然, 原来就没多好, 毕竟不能传入, 用来刷流的话相当于废了一半, 最后竟然是用tinc/wireguard走V6架起来的v4隧道速度更快 [允悲]

既然V6成为了刚需, 而且希望尽可能不动用软路由, 加上之前参考大王子配置过Win下的tinc, 那用tinc成为了很自然的想法。

How 动手

哪来的V6地址? 15年看CSDN上THU那篇神文配置SS的时候完全没想过V6原来有这么多用途。注意到DO有一个/124的”Configurable Address Range”, 下面用2001:2333::0 ~ 2001:2333::f 代替。不用2001:db8::/32保留地址是因为看过很多别的教程, 用db8搞得不知道哪个是用在隧道上的私有地址, 哪些是真正的公网地址 [晕]

咨询了大王子后, 得知能否配置成功很大程度取决于VPS服务商的路由控制, 如是否绑定MAC。将VPS的V6地址手动改成2001:2333::2后(原来尾缀是1), 发现依然可以路由, 只是最后一跳的路由器发生了变化(原来是xxxx::12, 变成xxxx::16, 貌似), 遂相信DO不会绑MAC和V6地址。

接下来的事情就简单了(不), 即在vps (下记作do) 和本地(下记作sysu)之间架起tinc, 之后想办法配上V6地址, 然后写路由, 最后让do代理ndp。

用到的所有地址:

do本身的默认V6地址: 2001:2333::1/64

tinc用的网段: 2001:2333::8/127

tinc - sysu侧: 2001:2333::8/127 (这个127并没什么卵用, 见下文详述)

tinc - do侧 : 2001:2333::9/127

Step 1 基本tinc配置

由于手拙加联不通延迟奇高, 最后放弃了重新写tinc配置的尝试, 直接搬之前搭的走V6那个。关于tinc的基本搭建, DO有篇 很好的教程, 这里不再详述, 只展示do/sysu两侧中关键的配置要素。

do侧

root@do:/etc/tinc/tc1# cat tinc.conf
Name = do
Port = 20233
Interface = tinc1
# 交换机(switch)模式比较关键, 如果默认的路由器(router)模式, 可能需要NAT66(存疑?)
Mode = switch
root@do:/etc/tinc/tc1# cat tinc-up
# !/bin/sh
ip link set $INTERFACE up
# 加V4地址和路由
ip addr add  10.233.0.1/32 dev $INTERFACE
ip route add 10.233.0.0/24 dev $INTERFACE
# 加V6地址
ip -6 addr add 2001:2333::9/127 dev $INTERFACE
# 加V6 ndp代理对象, 因为do的eth0是WAN口, 所以要在该界面代理对2001:2333::8的ndp请求
ip -6 neigh add proxy 2001:2333::8 dev eth0
root@do:/etc/tinc/tc1# cat tinc-down
# !/bin/sh
ip -6 neigh del proxy 2001:2333::8 dev eth0
ip -6 addr del 2001:2333::9/127 dev $INTERFACE
ip route del 10.233.0.0/24 dev $INTERFACE
ip addr del 10.233.0.1/32 dev $INTERFACE
ip link set $INTERFACE down
root@do:/etc/tinc/tc1/hosts# cat sysu
Port = 20233
# 由于是Switch模式, 所以子网写不写好像都不要紧, 写了也没错
Subnet = 10.233.0.2/32
Subnet = [2001:2333::8]/128

-----BEGIN RSA PUBLIC KEY-----
MAparagraphiss0plyon3ormor3cons3cutiv3lin3soft3xtInmark7ownsourc3co73paragraphsar3s3parat37bymor3thanon3blanIguchiYuukaDaiSukiklin3sInTyporayouonlyn337topr3ssR3turntocr3at3an3wparagraphB
-----END RSA PUBLIC KEY-----

sysu侧

gyakkun@sysu-win MINGW64 /c/Program Files (x86)/tinc/tc2
$ cat tinc.conf
Name = sysu
Port = 20233
Interface = tinc2
ConnectTo = do
Mode = switch
# TCPOnly是因为测试发现联不通UDP流量一大就断
# 代价是初连接时的3倍延迟以及高负载时候ping值延迟都很难看 (
TCPOnly = yes

Win下不需要写tinc-up/down, 因为后面路由都是手动加的。

gyakkun@gyak-win MINGW64 /c/Program Files (x86)/tinc/tc2/hosts
$ cat do
# Address填入你的VPS单播V4地址
Address = 1.1.1.233
Port = 20233
# 由于是Switch模式, 所以子网写不写好像都不要紧, 写了也没错, 大概 (
Subnet = 0.0.0.0/0
Subnet = [::]/0

-----BEGIN RSA PUBLIC KEY-----
MAparagraphiss0plyon3ormor3cons3cutiv3lin3soft3xtInmark7ownsourc3co73paragraphsar3s3parat37bymor3thanon3blanIguchiYuukaDaiSukiklin3sInTyporayouonlyn337topr3ssR3turntocr3at3an3wparagraphB
-----END RSA PUBLIC KEY-----

Step 2 两侧启动tinc

do侧

可以先开前台Debug调试

root@do:/etc/tinc# tincd -n tc1 -D -d3

稳定后就直接开tincd

root@do:/etc/tinc# tincd -n tc1

sysu侧

Win正式执行tincd之前, 先运行 C:\Program Files (x86)\tinc\tap-win64 下的 addtap.bat 添加网络界面。

注意创建了网络界面后, 需要把名字改成和tinc.conf里的Interface一样, 此处是tinc2。

tinc2

因为没有tinc-up/down脚本, 所以要事先手动配置该界面的V4/V6地址, 应与之前配置文件里面写的保持一致。

V4地址/掩码/网关: 10.233.0.2 / 255.255.255.0 / 10.233.0.1

V6地址/掩码/网关: 2001:2333::8 / 128 / (空)

V6 DNS: 2001:4860:4860::8888 / 2001:4860:4860::8844

这里有两点比较坑, 一是Win不能写127的掩码然后加一个网关, 所以先这样写128写死, 后面用route命令增加路由;二是如果不写V6 DNS的话, 将来就算V6链路通了Win也不会给解析V6地址, 即使nslookup能出V6地址也好, 直接ping也是ping不通bt.byr.cn的(啊, 伟大的BYR)

Win下同样的命令似乎开不了调试 [晕], 所以直接开吧。

c:\Program Files (x86)\tinc>tincd -n tc2

Step 3 Win侧配置路由

命令行敲

c:\Program Files (x86)\tinc>route -6 print

里面应该有一条默认V6路由, 这有碍于下面的配置, 所以先干掉, 注意需要管理员权限

c:\Program Files (x86)\tinc>route delete ::/0

然后照加就是了

c:\Program Files (x86)\tinc>route -6 ADD ::/0 2001:2333::9 IF ##

注意此处的IF ##要写route print打出来的接口列表中对应 TAP-Win32 Adapter 的序号。

基本就大功告成了, 试着去ping bt.byr.cn吧 (笑)

本文仅供参考, 如有疑问请提出, 就不留联系方式了 (


特别鸣谢 大王子

Ref1: How To Install Tinc and Set Up a Basic VPN on Ubuntu 14.04

Ref2: TINC - 构建 IPV6 隧道及私有网络 - imlonghao

Ref3: IPV6 with Docker