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

2023-07-26 21:12:15 +08:00
 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
1204 次点击
所在节点    程序员
4 条回复
FreeEx
2023-07-26 21:34:16 +08:00
兄弟你这个写的太复杂了,如果只要端口转发功能,100 行代码就实现了。
看看我这个 https://github.com/dushixiang/4dnat
onewesong
2023-07-26 22:00:19 +08:00
确实,前面有写了个 demo 实现端口转发不到 100 行就搞定了
之所以项目结构变成这样是为了方便后期扩展

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

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

目前看这个软件这两点还是可以的
ruanimal
2023-07-27 11:16:34 +08:00
这种情况 linux lvs 不能用吗
huahsiung
2023-07-27 15:15:34 +08:00
曾经以为改动 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