公司有很多新上的只有 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
1
FreeEx 2023-07-26 21:34:16 +08:00
兄弟你这个写的太复杂了,如果只要端口转发功能,100 行代码就实现了。
看看我这个 https://github.com/dushixiang/4dnat |
2
onewesong OP 确实,前面有写了个 demo 实现端口转发不到 100 行就搞定了
之所以项目结构变成这样是为了方便后期扩展 而且为了避免要增加新的转发要重启程序,增加了 RESTFUL 接口支持对连接信息进行增删改查,所以还是用 MVC 的分层结构好一些 另外我觉得评价软件设计复不复杂应该要看两方面 一、使用方式是否复杂 二、扩展是否复杂 目前看这个软件这两点还是可以的 |
3
ruanimal 2023-07-27 11:16:34 +08:00
这种情况 linux lvs 不能用吗
|
4
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 |