撸了一个轻量的跨协议栈端口转发工具

292 天前
 onewesong

背景

公司有很多新上的只有 IPv6 公网的节点

老的系统很多很杂要支持 IPv6 设备改造周期很长

解决方案

其实可以加一个组件来做 ipv4 到 ipv6 的网络转发,这样旧的系统就不用改造,还是访问设备的 ipv4 虚拟地址就可以了

这里用 golang 写了个轻量跨协议端口转发工具,再配合 iptables NAT 转换就可以实现透明代理

项目已开源: goforward

有需要的可以自取

简单列下使用姿势

goforward -f 127.0.0.1:1111->1.1.1.1:443
goforward -f 127.0.0.1:12345->[2400:3200::1]:443
goforward -f 127.0.0.1:12345->[2400:3200::1]:443,127.0.0.1:12346->[2400:3200:baba::1]:443
1033 次点击
所在节点    程序员
4 条回复
FreeEx
292 天前
兄弟你这个写的太复杂了,如果只要端口转发功能,100 行代码就实现了。
看看我这个 https://github.com/dushixiang/4dnat
onewesong
292 天前
确实,前面有写了个 demo 实现端口转发不到 100 行就搞定了
之所以项目结构变成这样是为了方便后期扩展

而且为了避免要增加新的转发要重启程序,增加了 RESTFUL 接口支持对连接信息进行增删改查,所以还是用 MVC 的分层结构好一些

另外我觉得评价软件设计复不复杂应该要看两方面
一、使用方式是否复杂
二、扩展是否复杂

目前看这个软件这两点还是可以的
ruanimal
291 天前
这种情况 linux lvs 不能用吗
huahsiung
291 天前
曾经以为改动 v4->v6 很难。后来发现只要有源码,改动几处就行了

```C

struct sockaddr_in addr -> struct sockaddr_in6 addr6

inet_pton(AF_INET -> inet_pton(AF_INET6

addr.sin_family = AF_INET -> addr6.sin6_family = AF_INET6

0.0.0.0 -> ::

```

基本就是把 AF_INET 改成 AF_INET6

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960013

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX