tls_test.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. package scenarios
  2. import (
  3. "crypto/x509"
  4. "runtime"
  5. "testing"
  6. "time"
  7. "golang.org/x/sync/errgroup"
  8. "google.golang.org/protobuf/types/known/anypb"
  9. core "github.com/v2fly/v2ray-core/v5"
  10. "github.com/v2fly/v2ray-core/v5/app/proxyman"
  11. "github.com/v2fly/v2ray-core/v5/common"
  12. "github.com/v2fly/v2ray-core/v5/common/net"
  13. "github.com/v2fly/v2ray-core/v5/common/protocol"
  14. "github.com/v2fly/v2ray-core/v5/common/protocol/tls/cert"
  15. "github.com/v2fly/v2ray-core/v5/common/serial"
  16. "github.com/v2fly/v2ray-core/v5/common/uuid"
  17. "github.com/v2fly/v2ray-core/v5/proxy/dokodemo"
  18. "github.com/v2fly/v2ray-core/v5/proxy/freedom"
  19. "github.com/v2fly/v2ray-core/v5/proxy/vmess"
  20. "github.com/v2fly/v2ray-core/v5/proxy/vmess/inbound"
  21. "github.com/v2fly/v2ray-core/v5/proxy/vmess/outbound"
  22. "github.com/v2fly/v2ray-core/v5/testing/servers/tcp"
  23. "github.com/v2fly/v2ray-core/v5/testing/servers/udp"
  24. "github.com/v2fly/v2ray-core/v5/transport/internet"
  25. "github.com/v2fly/v2ray-core/v5/transport/internet/http"
  26. "github.com/v2fly/v2ray-core/v5/transport/internet/tls"
  27. "github.com/v2fly/v2ray-core/v5/transport/internet/websocket"
  28. )
  29. func TestSimpleTLSConnection(t *testing.T) {
  30. tcpServer := tcp.Server{
  31. MsgProcessor: xor,
  32. }
  33. dest, err := tcpServer.Start()
  34. common.Must(err)
  35. defer tcpServer.Close()
  36. userID := protocol.NewID(uuid.New())
  37. serverPort := tcp.PickPort()
  38. serverConfig := &core.Config{
  39. Inbound: []*core.InboundHandlerConfig{
  40. {
  41. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  42. PortRange: net.SinglePortRange(serverPort),
  43. Listen: net.NewIPOrDomain(net.LocalHostIP),
  44. StreamSettings: &internet.StreamConfig{
  45. SecurityType: serial.GetMessageType(&tls.Config{}),
  46. SecuritySettings: []*anypb.Any{
  47. serial.ToTypedMessage(&tls.Config{
  48. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  49. }),
  50. },
  51. },
  52. }),
  53. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  54. User: []*protocol.User{
  55. {
  56. Account: serial.ToTypedMessage(&vmess.Account{
  57. Id: userID.String(),
  58. }),
  59. },
  60. },
  61. }),
  62. },
  63. },
  64. Outbound: []*core.OutboundHandlerConfig{
  65. {
  66. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  67. },
  68. },
  69. }
  70. clientPort := tcp.PickPort()
  71. clientConfig := &core.Config{
  72. Inbound: []*core.InboundHandlerConfig{
  73. {
  74. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  75. PortRange: net.SinglePortRange(clientPort),
  76. Listen: net.NewIPOrDomain(net.LocalHostIP),
  77. }),
  78. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  79. Address: net.NewIPOrDomain(dest.Address),
  80. Port: uint32(dest.Port),
  81. NetworkList: &net.NetworkList{
  82. Network: []net.Network{net.Network_TCP},
  83. },
  84. }),
  85. },
  86. },
  87. Outbound: []*core.OutboundHandlerConfig{
  88. {
  89. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  90. Receiver: []*protocol.ServerEndpoint{
  91. {
  92. Address: net.NewIPOrDomain(net.LocalHostIP),
  93. Port: uint32(serverPort),
  94. User: []*protocol.User{
  95. {
  96. Account: serial.ToTypedMessage(&vmess.Account{
  97. Id: userID.String(),
  98. }),
  99. },
  100. },
  101. },
  102. },
  103. }),
  104. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  105. StreamSettings: &internet.StreamConfig{
  106. SecurityType: serial.GetMessageType(&tls.Config{}),
  107. SecuritySettings: []*anypb.Any{
  108. serial.ToTypedMessage(&tls.Config{
  109. AllowInsecure: true,
  110. }),
  111. },
  112. },
  113. }),
  114. },
  115. },
  116. }
  117. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  118. common.Must(err)
  119. defer CloseAllServers(servers)
  120. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  121. t.Fatal(err)
  122. }
  123. }
  124. func TestAutoIssuingCertificate(t *testing.T) {
  125. if runtime.GOOS == "windows" {
  126. // Not supported on Windows yet.
  127. return
  128. }
  129. if runtime.GOARCH == "arm64" {
  130. return
  131. }
  132. tcpServer := tcp.Server{
  133. MsgProcessor: xor,
  134. }
  135. dest, err := tcpServer.Start()
  136. common.Must(err)
  137. defer tcpServer.Close()
  138. caCert, err := cert.Generate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageDigitalSignature|x509.KeyUsageKeyEncipherment|x509.KeyUsageCertSign))
  139. common.Must(err)
  140. certPEM, keyPEM := caCert.ToPEM()
  141. userID := protocol.NewID(uuid.New())
  142. serverPort := tcp.PickPort()
  143. serverConfig := &core.Config{
  144. Inbound: []*core.InboundHandlerConfig{
  145. {
  146. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  147. PortRange: net.SinglePortRange(serverPort),
  148. Listen: net.NewIPOrDomain(net.LocalHostIP),
  149. StreamSettings: &internet.StreamConfig{
  150. SecurityType: serial.GetMessageType(&tls.Config{}),
  151. SecuritySettings: []*anypb.Any{
  152. serial.ToTypedMessage(&tls.Config{
  153. Certificate: []*tls.Certificate{{
  154. Certificate: certPEM,
  155. Key: keyPEM,
  156. Usage: tls.Certificate_AUTHORITY_ISSUE,
  157. }},
  158. }),
  159. },
  160. },
  161. }),
  162. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  163. User: []*protocol.User{
  164. {
  165. Account: serial.ToTypedMessage(&vmess.Account{
  166. Id: userID.String(),
  167. }),
  168. },
  169. },
  170. }),
  171. },
  172. },
  173. Outbound: []*core.OutboundHandlerConfig{
  174. {
  175. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  176. },
  177. },
  178. }
  179. clientPort := tcp.PickPort()
  180. clientConfig := &core.Config{
  181. Inbound: []*core.InboundHandlerConfig{
  182. {
  183. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  184. PortRange: net.SinglePortRange(clientPort),
  185. Listen: net.NewIPOrDomain(net.LocalHostIP),
  186. }),
  187. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  188. Address: net.NewIPOrDomain(dest.Address),
  189. Port: uint32(dest.Port),
  190. NetworkList: &net.NetworkList{
  191. Network: []net.Network{net.Network_TCP},
  192. },
  193. }),
  194. },
  195. },
  196. Outbound: []*core.OutboundHandlerConfig{
  197. {
  198. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  199. Receiver: []*protocol.ServerEndpoint{
  200. {
  201. Address: net.NewIPOrDomain(net.LocalHostIP),
  202. Port: uint32(serverPort),
  203. User: []*protocol.User{
  204. {
  205. Account: serial.ToTypedMessage(&vmess.Account{
  206. Id: userID.String(),
  207. }),
  208. },
  209. },
  210. },
  211. },
  212. }),
  213. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  214. StreamSettings: &internet.StreamConfig{
  215. SecurityType: serial.GetMessageType(&tls.Config{}),
  216. SecuritySettings: []*anypb.Any{
  217. serial.ToTypedMessage(&tls.Config{
  218. ServerName: "v2fly.org",
  219. Certificate: []*tls.Certificate{{
  220. Certificate: certPEM,
  221. Usage: tls.Certificate_AUTHORITY_VERIFY,
  222. }},
  223. }),
  224. },
  225. },
  226. }),
  227. },
  228. },
  229. }
  230. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  231. common.Must(err)
  232. defer CloseAllServers(servers)
  233. for i := 0; i < 10; i++ {
  234. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  235. t.Error(err)
  236. }
  237. }
  238. }
  239. func TestTLSOverKCP(t *testing.T) {
  240. tcpServer := tcp.Server{
  241. MsgProcessor: xor,
  242. }
  243. dest, err := tcpServer.Start()
  244. common.Must(err)
  245. defer tcpServer.Close()
  246. userID := protocol.NewID(uuid.New())
  247. serverPort := udp.PickPort()
  248. serverConfig := &core.Config{
  249. Inbound: []*core.InboundHandlerConfig{
  250. {
  251. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  252. PortRange: net.SinglePortRange(serverPort),
  253. Listen: net.NewIPOrDomain(net.LocalHostIP),
  254. StreamSettings: &internet.StreamConfig{
  255. Protocol: internet.TransportProtocol_MKCP,
  256. SecurityType: serial.GetMessageType(&tls.Config{}),
  257. SecuritySettings: []*anypb.Any{
  258. serial.ToTypedMessage(&tls.Config{
  259. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  260. }),
  261. },
  262. },
  263. }),
  264. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  265. User: []*protocol.User{
  266. {
  267. Account: serial.ToTypedMessage(&vmess.Account{
  268. Id: userID.String(),
  269. }),
  270. },
  271. },
  272. }),
  273. },
  274. },
  275. Outbound: []*core.OutboundHandlerConfig{
  276. {
  277. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  278. },
  279. },
  280. }
  281. clientPort := tcp.PickPort()
  282. clientConfig := &core.Config{
  283. Inbound: []*core.InboundHandlerConfig{
  284. {
  285. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  286. PortRange: net.SinglePortRange(clientPort),
  287. Listen: net.NewIPOrDomain(net.LocalHostIP),
  288. }),
  289. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  290. Address: net.NewIPOrDomain(dest.Address),
  291. Port: uint32(dest.Port),
  292. NetworkList: &net.NetworkList{
  293. Network: []net.Network{net.Network_TCP},
  294. },
  295. }),
  296. },
  297. },
  298. Outbound: []*core.OutboundHandlerConfig{
  299. {
  300. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  301. Receiver: []*protocol.ServerEndpoint{
  302. {
  303. Address: net.NewIPOrDomain(net.LocalHostIP),
  304. Port: uint32(serverPort),
  305. User: []*protocol.User{
  306. {
  307. Account: serial.ToTypedMessage(&vmess.Account{
  308. Id: userID.String(),
  309. }),
  310. },
  311. },
  312. },
  313. },
  314. }),
  315. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  316. StreamSettings: &internet.StreamConfig{
  317. Protocol: internet.TransportProtocol_MKCP,
  318. SecurityType: serial.GetMessageType(&tls.Config{}),
  319. SecuritySettings: []*anypb.Any{
  320. serial.ToTypedMessage(&tls.Config{
  321. AllowInsecure: true,
  322. }),
  323. },
  324. },
  325. }),
  326. },
  327. },
  328. }
  329. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  330. common.Must(err)
  331. defer CloseAllServers(servers)
  332. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  333. t.Error(err)
  334. }
  335. }
  336. func TestTLSOverWebSocket(t *testing.T) {
  337. tcpServer := tcp.Server{
  338. MsgProcessor: xor,
  339. }
  340. dest, err := tcpServer.Start()
  341. common.Must(err)
  342. defer tcpServer.Close()
  343. userID := protocol.NewID(uuid.New())
  344. serverPort := tcp.PickPort()
  345. serverConfig := &core.Config{
  346. Inbound: []*core.InboundHandlerConfig{
  347. {
  348. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  349. PortRange: net.SinglePortRange(serverPort),
  350. Listen: net.NewIPOrDomain(net.LocalHostIP),
  351. StreamSettings: &internet.StreamConfig{
  352. Protocol: internet.TransportProtocol_WebSocket,
  353. SecurityType: serial.GetMessageType(&tls.Config{}),
  354. SecuritySettings: []*anypb.Any{
  355. serial.ToTypedMessage(&tls.Config{
  356. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  357. }),
  358. },
  359. },
  360. }),
  361. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  362. User: []*protocol.User{
  363. {
  364. Account: serial.ToTypedMessage(&vmess.Account{
  365. Id: userID.String(),
  366. }),
  367. },
  368. },
  369. }),
  370. },
  371. },
  372. Outbound: []*core.OutboundHandlerConfig{
  373. {
  374. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  375. },
  376. },
  377. }
  378. clientPort := tcp.PickPort()
  379. clientConfig := &core.Config{
  380. Inbound: []*core.InboundHandlerConfig{
  381. {
  382. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  383. PortRange: net.SinglePortRange(clientPort),
  384. Listen: net.NewIPOrDomain(net.LocalHostIP),
  385. }),
  386. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  387. Address: net.NewIPOrDomain(dest.Address),
  388. Port: uint32(dest.Port),
  389. NetworkList: &net.NetworkList{
  390. Network: []net.Network{net.Network_TCP},
  391. },
  392. }),
  393. },
  394. },
  395. Outbound: []*core.OutboundHandlerConfig{
  396. {
  397. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  398. Receiver: []*protocol.ServerEndpoint{
  399. {
  400. Address: net.NewIPOrDomain(net.LocalHostIP),
  401. Port: uint32(serverPort),
  402. User: []*protocol.User{
  403. {
  404. Account: serial.ToTypedMessage(&vmess.Account{
  405. Id: userID.String(),
  406. }),
  407. },
  408. },
  409. },
  410. },
  411. }),
  412. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  413. StreamSettings: &internet.StreamConfig{
  414. Protocol: internet.TransportProtocol_WebSocket,
  415. TransportSettings: []*internet.TransportConfig{
  416. {
  417. Protocol: internet.TransportProtocol_WebSocket,
  418. Settings: serial.ToTypedMessage(&websocket.Config{}),
  419. },
  420. },
  421. SecurityType: serial.GetMessageType(&tls.Config{}),
  422. SecuritySettings: []*anypb.Any{
  423. serial.ToTypedMessage(&tls.Config{
  424. AllowInsecure: true,
  425. }),
  426. },
  427. },
  428. }),
  429. },
  430. },
  431. }
  432. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  433. common.Must(err)
  434. defer CloseAllServers(servers)
  435. var errg errgroup.Group
  436. for i := 0; i < 10; i++ {
  437. errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
  438. }
  439. if err := errg.Wait(); err != nil {
  440. t.Error(err)
  441. }
  442. }
  443. func TestHTTP2(t *testing.T) {
  444. tcpServer := tcp.Server{
  445. MsgProcessor: xor,
  446. }
  447. dest, err := tcpServer.Start()
  448. common.Must(err)
  449. defer tcpServer.Close()
  450. userID := protocol.NewID(uuid.New())
  451. serverPort := tcp.PickPort()
  452. serverConfig := &core.Config{
  453. Inbound: []*core.InboundHandlerConfig{
  454. {
  455. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  456. PortRange: net.SinglePortRange(serverPort),
  457. Listen: net.NewIPOrDomain(net.LocalHostIP),
  458. StreamSettings: &internet.StreamConfig{
  459. Protocol: internet.TransportProtocol_HTTP,
  460. TransportSettings: []*internet.TransportConfig{
  461. {
  462. Protocol: internet.TransportProtocol_HTTP,
  463. Settings: serial.ToTypedMessage(&http.Config{
  464. Host: []string{"v2fly.org"},
  465. Path: "/testpath",
  466. }),
  467. },
  468. },
  469. SecurityType: serial.GetMessageType(&tls.Config{}),
  470. SecuritySettings: []*anypb.Any{
  471. serial.ToTypedMessage(&tls.Config{
  472. Certificate: []*tls.Certificate{tls.ParseCertificate(cert.MustGenerate(nil))},
  473. }),
  474. },
  475. },
  476. }),
  477. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  478. User: []*protocol.User{
  479. {
  480. Account: serial.ToTypedMessage(&vmess.Account{
  481. Id: userID.String(),
  482. }),
  483. },
  484. },
  485. }),
  486. },
  487. },
  488. Outbound: []*core.OutboundHandlerConfig{
  489. {
  490. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  491. },
  492. },
  493. }
  494. clientPort := tcp.PickPort()
  495. clientConfig := &core.Config{
  496. Inbound: []*core.InboundHandlerConfig{
  497. {
  498. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  499. PortRange: net.SinglePortRange(clientPort),
  500. Listen: net.NewIPOrDomain(net.LocalHostIP),
  501. }),
  502. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  503. Address: net.NewIPOrDomain(dest.Address),
  504. Port: uint32(dest.Port),
  505. NetworkList: &net.NetworkList{
  506. Network: []net.Network{net.Network_TCP},
  507. },
  508. }),
  509. },
  510. },
  511. Outbound: []*core.OutboundHandlerConfig{
  512. {
  513. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  514. Receiver: []*protocol.ServerEndpoint{
  515. {
  516. Address: net.NewIPOrDomain(net.LocalHostIP),
  517. Port: uint32(serverPort),
  518. User: []*protocol.User{
  519. {
  520. Account: serial.ToTypedMessage(&vmess.Account{
  521. Id: userID.String(),
  522. }),
  523. },
  524. },
  525. },
  526. },
  527. }),
  528. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  529. StreamSettings: &internet.StreamConfig{
  530. Protocol: internet.TransportProtocol_HTTP,
  531. TransportSettings: []*internet.TransportConfig{
  532. {
  533. Protocol: internet.TransportProtocol_HTTP,
  534. Settings: serial.ToTypedMessage(&http.Config{
  535. Host: []string{"v2fly.org"},
  536. Path: "/testpath",
  537. }),
  538. },
  539. },
  540. SecurityType: serial.GetMessageType(&tls.Config{}),
  541. SecuritySettings: []*anypb.Any{
  542. serial.ToTypedMessage(&tls.Config{
  543. AllowInsecure: true,
  544. }),
  545. },
  546. },
  547. }),
  548. },
  549. },
  550. }
  551. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  552. common.Must(err)
  553. defer CloseAllServers(servers)
  554. var errg errgroup.Group
  555. for i := 0; i < 10; i++ {
  556. errg.Go(testTCPConn(clientPort, 7168*1024, time.Second*40))
  557. }
  558. if err := errg.Wait(); err != nil {
  559. t.Error(err)
  560. }
  561. }
  562. func TestSimpleTLSConnectionPinned(t *testing.T) {
  563. tcpServer := tcp.Server{
  564. MsgProcessor: xor,
  565. }
  566. dest, err := tcpServer.Start()
  567. common.Must(err)
  568. defer tcpServer.Close()
  569. certificateDer := cert.MustGenerate(nil)
  570. certificate := tls.ParseCertificate(certificateDer)
  571. certHash := tls.GenerateCertChainHash([][]byte{certificateDer.Certificate})
  572. userID := protocol.NewID(uuid.New())
  573. serverPort := tcp.PickPort()
  574. serverConfig := &core.Config{
  575. Inbound: []*core.InboundHandlerConfig{
  576. {
  577. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  578. PortRange: net.SinglePortRange(serverPort),
  579. Listen: net.NewIPOrDomain(net.LocalHostIP),
  580. StreamSettings: &internet.StreamConfig{
  581. SecurityType: serial.GetMessageType(&tls.Config{}),
  582. SecuritySettings: []*anypb.Any{
  583. serial.ToTypedMessage(&tls.Config{
  584. Certificate: []*tls.Certificate{certificate},
  585. }),
  586. },
  587. },
  588. }),
  589. ProxySettings: serial.ToTypedMessage(&inbound.Config{
  590. User: []*protocol.User{
  591. {
  592. Account: serial.ToTypedMessage(&vmess.Account{
  593. Id: userID.String(),
  594. }),
  595. },
  596. },
  597. }),
  598. },
  599. },
  600. Outbound: []*core.OutboundHandlerConfig{
  601. {
  602. ProxySettings: serial.ToTypedMessage(&freedom.Config{}),
  603. },
  604. },
  605. }
  606. clientPort := tcp.PickPort()
  607. clientConfig := &core.Config{
  608. Inbound: []*core.InboundHandlerConfig{
  609. {
  610. ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{
  611. PortRange: net.SinglePortRange(clientPort),
  612. Listen: net.NewIPOrDomain(net.LocalHostIP),
  613. }),
  614. ProxySettings: serial.ToTypedMessage(&dokodemo.Config{
  615. Address: net.NewIPOrDomain(dest.Address),
  616. Port: uint32(dest.Port),
  617. NetworkList: &net.NetworkList{
  618. Network: []net.Network{net.Network_TCP},
  619. },
  620. }),
  621. },
  622. },
  623. Outbound: []*core.OutboundHandlerConfig{
  624. {
  625. ProxySettings: serial.ToTypedMessage(&outbound.Config{
  626. Receiver: []*protocol.ServerEndpoint{
  627. {
  628. Address: net.NewIPOrDomain(net.LocalHostIP),
  629. Port: uint32(serverPort),
  630. User: []*protocol.User{
  631. {
  632. Account: serial.ToTypedMessage(&vmess.Account{
  633. Id: userID.String(),
  634. }),
  635. },
  636. },
  637. },
  638. },
  639. }),
  640. SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{
  641. StreamSettings: &internet.StreamConfig{
  642. SecurityType: serial.GetMessageType(&tls.Config{}),
  643. SecuritySettings: []*anypb.Any{
  644. serial.ToTypedMessage(&tls.Config{
  645. AllowInsecure: true,
  646. PinnedPeerCertificateChainSha256: [][]byte{certHash},
  647. }),
  648. },
  649. },
  650. }),
  651. },
  652. },
  653. }
  654. servers, err := InitializeServerConfigs(serverConfig, clientConfig)
  655. common.Must(err)
  656. defer CloseAllServers(servers)
  657. if err := testTCPConn(clientPort, 1024, time.Second*20)(); err != nil {
  658. t.Fatal(err)
  659. }
  660. }