SingBoxBuildProxy.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Components\Client;
  3. /*
  4. * 本文件依据Clash文件编辑
  5. * https://github.com/Dreamacro/clash/tree/master/adapters/outbound
  6. *
  7. */
  8. class SingBoxBuildProxy
  9. {
  10. public static function buildShadowsocks($server)
  11. {
  12. return [
  13. 'tag' => $server['name'],
  14. 'type' => 'shadowsocks',
  15. 'server' => $server['host'],
  16. 'server_port' => $server['port'],
  17. 'password' => $server['passwd'],
  18. 'method' => $server['method'],
  19. ];
  20. }
  21. public static function buildVmess($server)
  22. {
  23. $array = [
  24. 'tag' => $server['name'],
  25. 'type' => 'vmess',
  26. 'server' => $server['host'],
  27. 'server_port' => $server['port'],
  28. 'uuid' => $server['uuid'],
  29. 'alter_id' => $server['v2_alter_id'],
  30. 'security' => $server['method'],
  31. ];
  32. if ($server['v2_tls']) {
  33. $array['tls'] = true;
  34. $array['insecure'] = !empty($server['sni']);
  35. if (! empty($server['sni'])) {
  36. $array['server_name'] = $server['sni'];
  37. } else if(!empty($server['v2_host'])){
  38. $array['server_name'] = $server['v2_host'];
  39. }
  40. }
  41. $array['network'] = $server['v2_net'];
  42. if ($server['v2_net'] === 'ws') {
  43. $array['transport']['path'] = $server['v2_path'];
  44. $array['transport']['headers'] = ['Host' => $server['v2_host']];
  45. }
  46. return $array;
  47. }
  48. public static function buildVless($server)
  49. {
  50. $array = [
  51. 'tag' => $server['name'],
  52. 'type' => 'vless',
  53. 'server' => $server['host'],
  54. 'server_port' => $server['port'],
  55. 'uuid' => $server['uuid'],
  56. //'alter_id' => $server['v2_alter_id'],
  57. 'flow' => 'xtls-rprx-vision',
  58. "packet_encoding" => "xudp"
  59. //'server_name' => $server['v2_sni'],
  60. // 'tls' => ['enabled' => true,"server_name"=>$server['v2_host']],
  61. ];
  62. //'reality-opts' => $server['v2_sni'],
  63. $tlsConfig = [];
  64. $tlsConfig['enabled'] = true;
  65. if (!empty($server['v2_sni'])) {
  66. $tlsConfig['server_name'] = $server['v2_sni'];
  67. } else if(!empty($server['v2_host'])){
  68. $tlsConfig['server_name'] = $server['v2_host'];
  69. }
  70. $tlsConfig['reality'] = ["enabled"=>true,'public_key' => $server['vless_pulkey']];
  71. $tlsConfig['utls'] = ['enabled' => true,'fingerprint'=> 'chrome'];
  72. $array['tls'] = $tlsConfig;
  73. return $array;
  74. }
  75. public static function buildTrojan($server)
  76. {
  77. $array = [
  78. 'tag' => $server['name'],
  79. 'type' => 'trojan',
  80. 'server' => $server['host'],
  81. 'server_port' => $server['port'],
  82. 'password' => $server['passwd'],
  83. ];
  84. if (! empty($server['sni'])) {
  85. $array['server_name'] = $server['sni'];
  86. }
  87. return $array;
  88. }
  89. }