mirror of
https://github.com/ScuroNeko/mtg.git
synced 2026-09-01 02:24:03 +03:00
Add public-ipv4/public-ipv6 config options for manual IP override
On some servers ifconfig.co is unreachable (e.g. Hetzner, AdGuard DNS blocklists), causing 'mtg doctor' SNI-DNS check and 'mtg access' link generation to fail. New config options allow specifying public IPs manually, with automatic detection as fallback. Fixes #405
This commit is contained in:
@@ -35,6 +35,8 @@ type Config struct {
|
||||
DomainFrontingProxyProtocol TypeBool `json:"domainFrontingProxyProtocol"`
|
||||
TolerateTimeSkewness TypeDuration `json:"tolerateTimeSkewness"`
|
||||
Concurrency TypeConcurrency `json:"concurrency"`
|
||||
PublicIPv4 TypeIP `json:"publicIpv4"`
|
||||
PublicIPv6 TypeIP `json:"publicIpv6"`
|
||||
DomainFronting struct {
|
||||
IP TypeIP `json:"ip"`
|
||||
Port TypePort `json:"port"`
|
||||
|
||||
@@ -42,6 +42,32 @@ func (suite *ConfigTestSuite) TestParseMinimalConfig() {
|
||||
suite.Equal("0.0.0.0:3128", conf.BindTo.String())
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) TestParsePublicIP() {
|
||||
conf, err := config.Parse(suite.ReadConfig("public_ip.toml"))
|
||||
suite.NoError(err)
|
||||
suite.Equal("203.0.113.1", conf.PublicIPv4.Get(nil).String())
|
||||
suite.Equal("2001:db8::1", conf.PublicIPv6.Get(nil).String())
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) TestParsePublicIPv4Only() {
|
||||
conf, err := config.Parse(suite.ReadConfig("public_ip_v4_only.toml"))
|
||||
suite.NoError(err)
|
||||
suite.Equal("203.0.113.1", conf.PublicIPv4.Get(nil).String())
|
||||
suite.Nil(conf.PublicIPv6.Get(nil))
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) TestParsePublicIPInvalid() {
|
||||
_, err := config.Parse(suite.ReadConfig("public_ip_invalid.toml"))
|
||||
suite.Error(err)
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) TestParsePublicIPNotSet() {
|
||||
conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
|
||||
suite.NoError(err)
|
||||
suite.Nil(conf.PublicIPv4.Get(nil))
|
||||
suite.Nil(conf.PublicIPv6.Get(nil))
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) TestString() {
|
||||
conf, err := config.Parse(suite.ReadConfig("minimal.toml"))
|
||||
suite.NoError(err)
|
||||
|
||||
@@ -21,6 +21,8 @@ type tomlConfig struct {
|
||||
DomainFrontingProxyProtocol bool `toml:"domain-fronting-proxy-protocol" json:"domainFrontingProxyProtocol,omitempty"`
|
||||
TolerateTimeSkewness string `toml:"tolerate-time-skewness" json:"tolerateTimeSkewness,omitempty"`
|
||||
Concurrency uint `toml:"concurrency" json:"concurrency,omitempty"`
|
||||
PublicIPv4 string `toml:"public-ipv4" json:"publicIpv4,omitempty"`
|
||||
PublicIPv6 string `toml:"public-ipv6" json:"publicIpv6,omitempty"`
|
||||
DomainFronting struct {
|
||||
IP string `toml:"ip" json:"ip,omitempty"`
|
||||
Port uint `toml:"port" json:"port,omitempty"`
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
secret = "7oe1GqLy6TBc38CV3jx7q09nb29nbGUuY29t"
|
||||
bind-to = "0.0.0.0:3128"
|
||||
public-ipv4 = "203.0.113.1"
|
||||
public-ipv6 = "2001:db8::1"
|
||||
@@ -0,0 +1,3 @@
|
||||
secret = "7oe1GqLy6TBc38CV3jx7q09nb29nbGUuY29t"
|
||||
bind-to = "0.0.0.0:3128"
|
||||
public-ipv4 = "not-an-ip"
|
||||
@@ -0,0 +1,3 @@
|
||||
secret = "7oe1GqLy6TBc38CV3jx7q09nb29nbGUuY29t"
|
||||
bind-to = "0.0.0.0:3128"
|
||||
public-ipv4 = "203.0.113.1"
|
||||
Reference in New Issue
Block a user