docker系列 使用docker基于lucky搭建简版公网IPv6访问入向网关
本文最后更新于 257 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

前言

因为IPv6和IPv4协议本质的不同,导致在未来IPv6公网IP为主流的趋势中,一些存在于IPv4上的由来已久的的传统技术失去了作用:例如端口映射、NAT等。在我正构思的家庭数据中心IPv6公网地址出口解决方案中,其中有些功能(比如端口映射)是需要类似的替代技术的,毕竟虽然IPv6地址无限,我也不可能让每个家里的设备都直接暴露在公网上。从安全角度来说,暴露一个点,然后经过这个点再访问其他点才是比较正常的逻辑,也更利于安全策略的制定。

要实现上述功能,就必须要传统IPv4上端口映射技术的升级替代技术:IPv6—>IPv4端口转发功能。可惜的是,现在除了openwrt可以通过安装lucky或者socat来实现,其他的路由器没看到有哪家支持的(其实openwrt严格上来说也不是支持,只是可以安装支持的软件),加之现在用openwrt做主路由的人也不多("旁路由"的倒是不少),所以,在路由器没有正式支持该功能之前,我的IPv6出口解决方案的主角可能要换人了。。

本篇文章就以方案主角之一,lucky的docker版为例,介绍lucky的主要功能。

搭建lucky

部署lucky


先说句题外话,正如我在上一篇文章(参见:OpenWrt软路由系列 docker版openwrt最佳使用方式探讨)所说:”我觉得docker方式部署最适合的是对外提供内容的应用(比如nginx,mysql),而不是需要频繁从容器内部访问外部网络这类(比如lucky、cloudtunnel、openwrt)“,特别是lucky这种还需要涉及IPv6—>IPv4转换的,对操作系统底层依赖很大,lucky的作者也有类似的说法:

image.png

所以如果真的要把lucky作为主力工具使用并且要跑大流量,更推荐其他非docker的方式部署。当然,如果是轻度使用,docker方式也可以,只是尽量采用host方式部署。


使用docker run格式搭建lucky的代码很简单,如下:

docker run -d --name lucky --restart=always --net=host gdy666/lucky

初始化lucky

使用链接http://宿主机ip:16601登录进入lucky的控制台,默认用户名密码均为"666":

image.png

image.png

配置lucky功能

动态域名

lucky内置支持的域名基本覆盖了常见的域名供应商(爱快只支持6个~~),且还支持自定义:

image.png

image.png

且支持多种获取IP的方式:
image.png

其中最后一种通过odhcpd获取的方式和openwrt是好搭配(openwrt的IPv6功能就是通过odhcpd来实现的)。


注:动态域名在IPv6时获取公网IP的方式和IPv4时候不同,IPv4其实是通过访问一个外部页面来获取自身公网地址的(运行在路由器上的动态域名除外,直接对应wan口IP即可),而IPv6就比较灵活了,既可以通过外部页面来获取(如上图中第一种方式),也可以直接获取自身的地址(如上图中的第2,3种获取方式)。其实我更推荐第2种方式,既通过自身网卡来获取,只不过这里有点要注意的是,网卡上既有私有IPv6地址,也有公网IPv6地址,为了保证识别的准确,可以添加IP选择匹配规则:

image.png

因为我是电信宽带,电信的IPv6是240e开头的,所以我加上了"^240e",这样就不会识别错误了,因为我遇到过不加ip选择匹配规则,有时动态域名会识别成fe开头的私网地址的情况,搞得我排了半天错~~~。


还有一种特殊情况,就是获取内网其他设备的IPv6地址,这种其实是比较麻烦的,一般情形如果刚好lucky和openwrt部署在一起且lucky不是docker部署方式且其他设备是使用的有状态的方式,可以用上图第4种方式获取;类似的,对于爱快来说,如果对方是有状态,可以查询自身的dhcp服务器上对应的DUID:

image.png

image.png

而如果是无状态的,爱快比lucky多提供一个根据对方mac地址来获取IPv6地址的方式:
image.png

不过这种方式不是很稳定,有时候会获取失败。

另:默认是简易模式,定制模式下会多一些选项,大家按自己的需求来配置即可,一般不用动:

image.png

web服务

lucky的web服务支持多种功能:

image.png

进入web服务规则界面,这里是定义监听的协议和端口,此处我们直接勾选tcp6,端口填写你要监听的端口:
image.png

上面的服务规则只是用来定义监听协议和端口,具体的功能都由"添加web服务子规则"来实现。

反向代理

lucky的web服务支持反向代理功能:

image.png

注:前端域名/地址和后端地址,直接填写IP或者域名,lucky会自动添加http://,所以除非是https,否则http直接填写域名和ip:端口即可。

以上是简易模式下的配置项,不过一般人也够了。如果有其他更细致的要求,可以打开定制模式开关:

image.png

image.png

image.png

说实话,功能还是不错的。

所以如果没有部署nginx,又需要简单的使用反向代理功能,又恰巧部署了lucky,那么用lucky实现反向代理是个不错的选择。

另:web服务下的其他功能都可以用定制模式提供更多选项,我就不重复介绍了。

重定向或者URL跳转

以重定向为例:

image.png

文件服务

可以把lucky本地的目录以网页方式显示:

image.png

这个我没有详细研究,大家感兴趣可以自己试试。

文本输出

可以非常简单得发布一段文字,支持3个变量:

image.png

端口转发

这个才是我最关注的功能,也是我把lucky纳入家庭数据中心IPv6出口解决方案的核心点,lucky的操作非常简洁:

image.png

所以在lucky的帮助下,在IPv6公网IP的出口环境中仍旧可以像以前IPv4公网地址的时候一样,通过发布单一IPv6公网地址即可访问整个内网设备。

当然,内网每个支持的设备也可以都有IPv6公网地址,不过这和"通过发布单一IPv6公网地址即可访问整个内网设备"这句话并不冲突:前者针对的是从外到内的访问的便利性和安全性,而后者主要是内部对外的访问的便利性。

STUN内网穿透

这个主要是对没有公网地址,需要使用STUN进行内网穿透的朋友而设置的,具体的配置请参看我另一篇文章:docker系列 使用docker基于coturn搭建自己的stun/turn服务器

不过还是那句话,试试tailscale,你才知道什么内网穿透都是浮云。

另:我觉得内网穿透(其实应该叫nat穿越,内网穿透这个叫法很有天朝特色,就像链路负载均衡、网页防篡改一样)这个概念本来就只是另外一个功能集:虚拟组网的一个效果体现,大家其实应该选择更好的虚拟组网方案,而不是专门针对内网穿透这个效果去选择实现的方式。

安全管理

如果要使用lucky来实现反向代理功能,那就需要考虑SSL证书的问题了。http虽然可用,但是一来不安全,二来运营商会把你的内容看得一清二楚,想搞你轻而易举(详细原因可以参看我另一篇文章:家庭数据中心系列 有公网IP的家庭宽带建站注意事项),所以就算你的域名真不想备案,也至少使用https来防一手。

image.png

lucky的SSL证书支持3种方式获取:
1、文件
image.png

如果有现成的证书,可以直接使用文件的方式上传到lucky。证书映射可以指定lucky本地的一个目录,上传的证书会以{备注名}.key {备注名}.pem 在该目录下保存。
2、路径

image.png

这种方式和文件其实是一样的,只不过不是通过上传,而是直接把证书上传到lucky本地的目录,然后直接指定路径。
3、ACME
image.png

如果会使用宝塔面板申请let’s Encrypt的证书,也肯定会用这个。

其他功能

lucky还有网络存储和网络唤醒功能:

image.png

image.png

有兴趣的朋友可以自行研究。

总结

其实对我而言,最重要的就是lucky的公网ipv6—>内网ipv4的端口转发功能,算是补上了我家庭数据中心IPv6出口解决方案的最后一块拼图(其实我还是更希望爱快开发这个功能~现在是没办法),而其他功能现在都有另外更强或者更便利的实现方式,比如反向代理使用nginx,动态域名用爱快,nat穿越使用tailscale(我可是ipv4和ipv6双栈公网环境,但是tailscale更方便和安全)。不过,对于一般的用户而言,如果你本身没有现成的反向代理,动态域名、nat穿越的解决方案,那么,只要部署一个lucky,就可以通通解决了(stun穿越需要有现成的stun服务器),所以我文章的题目才叫"简版公网IPv6访问入向网关",至于"豪华版"就是完整的解决方案了,这个我需要时间好好构思一下。。。

另外,再强调一下,轻量级使用可以用lucky的docker模式,而如果是重度使用,还是推荐使用非docker的方式来进行部署。

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN