居家科研,如何畅通无阻地接入IPv6,并利用附带的诸多好处?

少于 1 分钟阅读

最近,由于众所周知的原因,中国大批科研人员滞留在家,无法接触到心心念念的CERNET; 由于同样众所周知的原因,大陆国境线上的路由器对IPv4数据包采取了更严格的工作模式。 于是,被迫与熟悉的网络世界隔离了一个多月的本文作者, 终于夜以继日钻研出了非常naïve的解决方法,特纂此文以示后人。

首先有必要说一下我手头能访问的几台机器:

  1. 家里的笔记本电脑;
  2. 实验室的工具人服务器,公网双栈IP,可ssh上去,但没有私人账号;
  3. 实验室的真正的服务器,双栈但无公网IPv4,可从工具人服务器ssh上去,有私人账号,无root权限;
  4. 位于国外的VPS,运行着众所周知的服务和另外一些不那么众所周知的服务。

呃……不知道这算不算麻烦,反正确实是整得我挺恶心的。 大多数人的情况不见得跟我完全一样,just adapt to yourself!

访问IPv6资源

ssh -D 1080 user@toolperson_ip  # run from your laptop @ home

此术曰dynamic port forwarding,会在本地1080创建一个socks代理, 把流量转发到工具人服务器上再对外界发出。 然后用你熟悉的方法配置浏览器、BT客户端等等,就可以随时接触到bt.XXX.cn上的众多资源了。

网上冲浪

ssh -L 22222:localhost:33333 user@toolperson_ip  # run from laptop @ home
ssh -R 33333:localhost:10808 user@toolperson_ip  # run from server @ lab

术曰local port forwarding,监听本地的22222端口,转发到工具人服务器的33333端口上; 曰remote port forwarding,监听工具人服务器的33333端口,转发到实验室服务器的10808端口上。 而在实验室服务器上监听着10808的可以是Shadowsocks/V2Ray等等,然后能做的事就任君遐想了。 一图胜千言version:

               +--------+        +--------------+        +---------+
               |        |        |              |        |         |
computer:      |  home  |        |  toolperson  |        |   lab   |
               |        |        |              |        |         |
               +--------+        +--------------+        +---------+
    port:      | 22222 >+--------+->  33333   >-+--------+> 10808 >+--------->
               +--------+        +--------------+        +---------+

其中关键之处在于如何建立两个连接。 事实上,由于toolperson和lab两台机器上都拿不到root权限,防火墙又是火力全开的, 简单的监听转发根本不可行,所以就有必要通过ssh端口转发曲线救国,间接建立连接。 local/remote forward使用相似的参数:ssh -L/R src_port:dst_ip:dst_port, 在local forward中,src是本地(ssh发起方),dst是远程(ssh接收方);remote forward中则正好相反。 注意其中的dst_ip,该IP/域名被解析的位置由-L/R参数确定, 更详细的说明可以RTFM,网上也有不少解释1

FAQ

Q:为什么要在实验室机器上跑代理?

A:IPv6数据包不容易被那啥。

Q:为什么不在家里的路由器上设置端口映射,然后从实验室机器上ssh -R

A:路由+光猫+运营商三层NAT,你叫我怎么映射到公网。

Q:为什么不直接在笔记本上执行ssh -L 2222:lab_lan_ip:10808

A:实验室机器有防火墙,没有能用来内网监听的端口。

Q:为什么不用NAT穿越把笔记本与实验室机器连起来?

A:我太菜,找不到现成方案。自己实现?不存在的。三层NAT,到底能不能打洞呢……

Q:ZeroTier据说能组建虚拟局域网,原理类似UDP打洞,why not have a try?

A:没有实验室服务器的root权限。

  1. https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/