项目作者: sodapanda

项目描述 :
FEC for UDP
高级语言: Go
项目地址: git://github.com/sodapanda/junkwire.git
创建时间: 2020-08-30T10:35:08Z
项目社区:https://github.com/sodapanda/junkwire

开源协议:

下载


JunkWire

功能:提高烂网的可用性。

UDP伪装TCP:伪装为TCP之后减少QoS

可配置多服务器,自动断线重连换服,上层无感知:心跳检测,每秒发送5个心跳包。如果5个心跳包都丢失的话就切换到下一个服务器。2秒即可完成。

可选FEC前向纠错:20个原始包加10个纠错包,就能将丢包率降低到万分之一。

交织编码:可以将短时间集中的丢包均匀开,防止原始包和纠错包都丢掉。

配置方法

junkwire使用tun设备进行数据传送,所以先确定运行环境支持tun设备。运行后会创建一个tun设备叫faketcp,这个设备ip地址可以通过配置文件配置。一般写成10.1.1.1即可,只要不跟自己本地网络环境冲突就行。运行后会虚拟一个网络设备10.1.1.2。

服务端配置

首先配置服务端DNAT,把对应端口的包转给junkwire处理。

首先开启ipv4转发,在 /etc/sysctl.conf 文件中添加 net.ipv4.ip_forward=1 然后运行sysctl -p使其生效。

添加iptables规则 iptables -t nat -A PREROUTING -i 网卡名 -d 网卡IP -p tcp —dport 17021(客户端连的端口) -j DNAT —to-destination 10.1.1.2:17021

wireguard配置举例,根据实际情况改动

  1. [Interface]
  2. Address = 10.200.201.1/24
  3. ListenPort = 21007
  4. #ListenPort = 12273
  5. PrivateKey = xxx
  6. MTU = 1340
  7. [Peer]
  8. PublicKey = xxx
  9. AllowedIPs = 10.200.201.2/32
  10. PersistentKeepalive = 25

服务端junkwire配置文件举例

  1. {
  2. "mode": "server",
  3. "queue":500,
  4. "server": {
  5. "tun": {
  6. "deviceIP": "10.1.1.1",
  7. "port": "17021",
  8. "srcIP": "10.1.1.2"
  9. },
  10. "socket": {
  11. "dstIP": "127.0.0.1",
  12. "dstPort": "21007"
  13. }
  14. },
  15. "fec": {
  16. "enable":false, //是否启用fec
  17. "seg": 20, //几个数据包
  18. "parity": 20, //几个纠错包
  19. "duration":0, //交织编码的时长
  20. "stageTimeout":8, //桶没装满的话最长等多久
  21. "cap":500,
  22. "row":1000
  23. }
  24. }

启动junkwire ./junkwire -c 配置文件

启动wireguard wg-quick up wg0

客户端配置

客户端需要让虚拟设备10.1.1.2的数据顺利发送,需要snat

iptables -t nat -A POSTROUTING -s 10.1.1.2 -p tcp -o eth0 -j SNAT —to-source 本机网卡ip

路由配置,防止出口ip也被带进了wireguard

ip route add 服务端ip/32 via 本地网关 dev eth0

wireguard配置

  1. [Interface]
  2. Address = 10.200.201.2/24
  3. PrivateKey = yJAu/oI+Oo/Mhswqbm3I/3PWYi+WSxX7JpTQ8IoQqWU=
  4. MTU = 1340
  5. [Peer]
  6. PublicKey = 5/SgVv3hc3f5Fa/XoLo4isBzyrwwATs5sfQv7oWhiTM=
  7. Endpoint = 127.0.0.1:21007
  8. AllowedIPs = 0.0.0.0/1,128.0.0.0/1
  9. PersistentKeepalive = 25

junkwire配置举例

  1. {
  2. "mode": "client",
  3. "queue":500,
  4. "client": {
  5. "tun": {
  6. "deviceIP": "10.1.1.1",
  7. "port": "8978",
  8. "srcIP": "10.1.1.2",
  9. "peers": [
  10. {
  11. "ip":"线路1",
  12. "port":"50018"
  13. },
  14. {
  15. "ip":"线路2",
  16. "port":"17021"
  17. },
  18. {
  19. "ip":"线路3",
  20. "port":"17021"
  21. }
  22. ]
  23. },
  24. "socket": {
  25. "listenPort": "21007"
  26. }
  27. },
  28. "fec": {
  29. "enable":false,
  30. "seg": 20,
  31. "parity": 10,
  32. "stageTimeout": 8,
  33. "duration": 0,
  34. "cap": 500,
  35. "row": 1000
  36. }
  37. }

启动junkwire ./junkwire -c 配置文件

启动wireguard wg-quick up wg0