撸了一个轻量的跨协议栈端口转发工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
onewesong
V2EX    程序员

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

  •  
      onewesong 2023-07-26 21:12:15 +08:00 1685 次点击
    这是一个创建于 836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

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

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

    解决方案

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

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

    项目已开源: goforward

    有需要的可以自取

    简单列下使用姿势

    • forward local ipv4 to remote ipv4
    goforward -f 127.0.0.1:1111->1.1.1.1:443 
    • forward local ipv4 to remote ipv6
    goforward -f 127.0.0.1:12345->[2400:3200::1]:443 
    • forward multiple mixes
    goforward -f 127.0.0.1:12345->[2400:3200::1]:443,127.0.0.1:12346->[2400:3200:baba::1]:443 
    4 条回复    2023-07-27 15:15:34 +08:00
    FreeEx
        1
    FreeEx  
       2023-07-26 21:34:16 +08:00
    兄弟你这个写的太复杂了,如果只要端口转发功能,100 行代码就实现了。
    看看我这个 https://github.com/dushixiang/4dnat
    onewesong
        2
    onewesong  
    OP
       2023-07-26 22:00:19 +08:00
    确实,前面有写了个 demo 实现端口转发不到 100 行就搞定了
    之所以项目结构变成这样是为了方便后期扩展

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

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

    目前看这个软件这两点还是可以的
    ruanimal
        3
    ruanimal  
       2023-07-27 11:16:34 +08:00
    这种情况 linux lvs 不能用吗
    huahsiung
        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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2543 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:45 PVG 11:45 LAX 19:45 JFK 22:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86