本帖最后由 dunce 于 2021-6-1 19:34 编辑
仓库地址: https://github.com/zephyrchien/ZTUN
6/1 UPDATE: 已经支持了DNS和超时,顺便支持了ipv6,可以做到ipv4->ipv6 & ipv6->ipv4
写这个程序的起因是realm不支持零拷贝,当初想着如果要给realm实现零拷贝,不如用C++重新写一个。于是我就尝试着写了一下。。(目前仍处于重度施工中,还没实现timer和dns resolver),感兴趣的同学可以来测个速
本地iperf3简单测速结果:
使用buffer时速度跟realm相当(15G/s)
使用pipe时(零拷贝)速度跟Go程序差不多(40G/s)
快速开始:
本程序没有外部依赖(EDIT: 除了glibc),直接把代码下载下来编译就行了:
- git clone https://github.com/zephyrchien/ZTUN
- cd ZTUN && mkdir build && cd build
- cmake ..
- make
复制代码
用命令行参数输入一对地址,或者指定配置文件:
- ztun -l :5000 -r 1.1.1.1:443 # 省略本地ip,默认为0.0.0.0
- ztun -c ztun.conf
复制代码
配置文件格式:
- # comment, starting with #
- # set log level and output path
- # level = none|warn|info|debug, default is info
- # file = filename, default is stderr
- log_level = info
- log_file = ztun.log
- # set the precision of timer and operation timeout
- # value: 1~2147483647(INT_MAX) ms
- # timer_intv = xxx, default is 500
- # connect_timeout = xxx, default is 2000
- # resolve_intv = xxx, default is 60000
- # resolve_timeout = xxx, default is 2000
- timer_intv = 500
- connect_timeout = 2000
- resolve_intv = 60000
- resolve_timeout = 2000
- # group1
- local = 127.0.0.1:5000
- remote = 1.1.1.1:443
- # group2 (use ipv6)
- local = ::1:10000
- remote = 2.2.2.2:8080
- # group3 (use domain name)
- local = :15000
- remote = www.google.com:80
- # and more...
复制代码
|