Merge pull request #170 from HyNetwork/wip-ipv6-only-mode

ipv6 only mode
This commit is contained in:
Toby 2021-12-10 01:23:28 -08:00 committed by GitHub
commit 3f598b837b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 23 additions and 2 deletions

View File

@ -184,7 +184,8 @@ encryption. If you need a proxy, just use our proxy modes.
"recv_window_conn": 15728640, // QUIC stream receive window "recv_window_conn": 15728640, // QUIC stream receive window
"recv_window_client": 67108864, // QUIC connection receive window "recv_window_client": 67108864, // QUIC connection receive window
"max_conn_client": 4096, // Max concurrent connections per client "max_conn_client": 4096, // Max concurrent connections per client
"disable_mtu_discovery": false // Disable Path MTU Discovery (RFC 8899) "disable_mtu_discovery": false, // Disable Path MTU Discovery (RFC 8899)
"ipv6_only": false // Only resolve domains to IPv6 address
} }
``` ```

View File

@ -170,7 +170,8 @@ Hysteria 是一个功能丰富的,专为恶劣网络环境进行优化的网
"recv_window_conn": 15728640, // QUIC stream receive window "recv_window_conn": 15728640, // QUIC stream receive window
"recv_window_client": 67108864, // QUIC connection receive window "recv_window_client": 67108864, // QUIC connection receive window
"max_conn_client": 4096, // 单客户端最大活跃连接数 "max_conn_client": 4096, // 单客户端最大活跃连接数
"disable_mtu_discovery": false // 禁用 MTU 探测 (RFC 8899) "disable_mtu_discovery": false, // 禁用 MTU 探测 (RFC 8899)
"ipv6_only": false // 强制把域名解析成 IPv6 地址
} }
``` ```

View File

@ -46,6 +46,7 @@ type serverConfig struct {
ReceiveWindowClient uint64 `json:"recv_window_client"` ReceiveWindowClient uint64 `json:"recv_window_client"`
MaxConnClient int `json:"max_conn_client"` MaxConnClient int `json:"max_conn_client"`
DisableMTUDiscovery bool `json:"disable_mtu_discovery"` DisableMTUDiscovery bool `json:"disable_mtu_discovery"`
IPv6Only bool `json:"ipv6_only"`
} }
func (c *serverConfig) Check() error { func (c *serverConfig) Check() error {

View File

@ -128,6 +128,10 @@ func server(config *serverConfig) {
if len(config.Obfs) > 0 { if len(config.Obfs) > 0 {
obfuscator = obfs.NewXPlusObfuscator([]byte(config.Obfs)) obfuscator = obfs.NewXPlusObfuscator([]byte(config.Obfs))
} }
// IPv6 only mode
if config.IPv6Only {
transport.DefaultTransport = transport.IPv6OnlyTransport
}
// ACL // ACL
var aclEngine *acl.Engine var aclEngine *acl.Engine
if len(config.ACL) > 0 { if len(config.ACL) > 0 {

View File

@ -22,6 +22,12 @@ var DefaultTransport Transport = &defaultTransport{
Timeout: 8 * time.Second, Timeout: 8 * time.Second,
} }
var IPv6OnlyTransport Transport = &ipv6OnlyTransport{
defaultTransport{
Timeout: 8 * time.Second,
},
}
type defaultTransport struct { type defaultTransport struct {
Timeout time.Duration Timeout time.Duration
} }
@ -67,3 +73,11 @@ func (t *defaultTransport) LocalListenTCP(laddr *net.TCPAddr) (*net.TCPListener,
func (t *defaultTransport) LocalListenUDP(laddr *net.UDPAddr) (*net.UDPConn, error) { func (t *defaultTransport) LocalListenUDP(laddr *net.UDPAddr) (*net.UDPConn, error) {
return net.ListenUDP("udp", laddr) return net.ListenUDP("udp", laddr)
} }
type ipv6OnlyTransport struct {
defaultTransport
}
func (t *ipv6OnlyTransport) LocalResolveIPAddr(address string) (*net.IPAddr, error) {
return net.ResolveIPAddr("ip6", address)
}