Skip to content

Commit e4a8966

Browse files
authored
fix (daemon) : Add docker.internal entry to virtual network DNS config (#3784) (#4601)
Add `docker.internal` entry to virtual network config DNS records. Signed-off-by: Rohan Kumar <rohaan@redhat.com>
1 parent c2b0086 commit e4a8966

File tree

2 files changed

+139
-55
lines changed

2 files changed

+139
-55
lines changed

cmd/crc/cmd/daemon.go

Lines changed: 69 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -66,69 +66,83 @@ var daemonCmd = &cobra.Command{
6666
return errors.New(ErrDaemonAlreadyRunning)
6767
}
6868

69-
virtualNetworkConfig := types.Configuration{
70-
Debug: false, // never log packets
71-
CaptureFile: os.Getenv("CRC_DAEMON_PCAP_FILE"),
72-
MTU: 4000, // Large packets slightly improve the performance. Less small packets.
73-
Subnet: "192.168.127.0/24",
74-
GatewayIP: constants.VSockGateway,
75-
GatewayMacAddress: "5a:94:ef:e4:0c:dd",
76-
DHCPStaticLeases: map[string]string{
77-
"192.168.127.2": "5a:94:ef:e4:0c:ee",
69+
virtualNetworkConfig := createNewVirtualNetworkConfig(config)
70+
err := run(&virtualNetworkConfig)
71+
return err
72+
},
73+
}
74+
75+
func createNewVirtualNetworkConfig(providedConfig *crcConfig.Config) types.Configuration {
76+
virtualNetworkConfig := types.Configuration{
77+
Debug: false, // never log packets
78+
CaptureFile: os.Getenv("CRC_DAEMON_PCAP_FILE"),
79+
MTU: 4000, // Large packets slightly improve the performance. Less small packets.
80+
Subnet: "192.168.127.0/24",
81+
GatewayIP: constants.VSockGateway,
82+
GatewayMacAddress: "5a:94:ef:e4:0c:dd",
83+
DHCPStaticLeases: map[string]string{
84+
"192.168.127.2": "5a:94:ef:e4:0c:ee",
85+
},
86+
DNS: []types.Zone{
87+
{
88+
Name: "apps-crc.testing.",
89+
DefaultIP: net.ParseIP("192.168.127.2"),
7890
},
79-
DNS: []types.Zone{
80-
{
81-
Name: "apps-crc.testing.",
82-
DefaultIP: net.ParseIP("192.168.127.2"),
91+
{
92+
Name: "crc.testing.",
93+
Records: []types.Record{
94+
{
95+
Name: "host",
96+
IP: net.ParseIP(hostVirtualIP),
97+
},
98+
{
99+
Name: "gateway",
100+
IP: net.ParseIP("192.168.127.1"),
101+
},
102+
{
103+
Name: "api",
104+
IP: net.ParseIP("192.168.127.2"),
105+
},
106+
{
107+
Name: "api-int",
108+
IP: net.ParseIP("192.168.127.2"),
109+
},
110+
{
111+
Regexp: regexp.MustCompile("crc-(.*?)-master-0"),
112+
IP: net.ParseIP("192.168.126.11"),
113+
},
83114
},
84-
{
85-
Name: "crc.testing.",
86-
Records: []types.Record{
87-
{
88-
Name: "host",
89-
IP: net.ParseIP(hostVirtualIP),
90-
},
91-
{
92-
Name: "gateway",
93-
IP: net.ParseIP("192.168.127.1"),
94-
},
95-
{
96-
Name: "api",
97-
IP: net.ParseIP("192.168.127.2"),
98-
},
99-
{
100-
Name: "api-int",
101-
IP: net.ParseIP("192.168.127.2"),
102-
},
103-
{
104-
Regexp: regexp.MustCompile("crc-(.*?)-master-0"),
105-
IP: net.ParseIP("192.168.126.11"),
106-
},
115+
},
116+
{
117+
Name: "containers.internal.",
118+
Records: []types.Record{
119+
{
120+
Name: "gateway",
121+
IP: net.ParseIP(hostVirtualIP),
107122
},
108123
},
109-
{
110-
Name: "containers.internal.",
111-
Records: []types.Record{
112-
{
113-
Name: "gateway",
114-
IP: net.ParseIP(hostVirtualIP),
115-
},
124+
},
125+
{
126+
Name: "docker.internal.",
127+
Records: []types.Record{
128+
{
129+
Name: "gateway",
130+
IP: net.ParseIP(hostVirtualIP),
116131
},
117132
},
118133
},
119-
Protocol: types.HyperKitProtocol,
120-
}
121-
if config.Get(crcConfig.HostNetworkAccess).AsBool() {
122-
log.Debugf("Enabling host network access")
123-
if virtualNetworkConfig.NAT == nil {
124-
virtualNetworkConfig.NAT = make(map[string]string)
125-
}
126-
virtualNetworkConfig.NAT[hostVirtualIP] = "127.0.0.1"
134+
},
135+
Protocol: types.HyperKitProtocol,
136+
GatewayVirtualIPs: []string{hostVirtualIP},
137+
}
138+
if providedConfig.Get(crcConfig.HostNetworkAccess).AsBool() {
139+
log.Debugf("Enabling host network access")
140+
if virtualNetworkConfig.NAT == nil {
141+
virtualNetworkConfig.NAT = make(map[string]string)
127142
}
128-
virtualNetworkConfig.GatewayVirtualIPs = []string{hostVirtualIP}
129-
err := run(&virtualNetworkConfig)
130-
return err
131-
},
143+
virtualNetworkConfig.NAT[hostVirtualIP] = "127.0.0.1"
144+
}
145+
return virtualNetworkConfig
132146
}
133147

134148
func run(configuration *types.Configuration) error {

cmd/crc/cmd/daemon_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,16 @@ package cmd
33
import (
44
"bytes"
55
"errors"
6+
"net"
67
"net/http"
78
"net/url"
89
"os"
10+
"regexp"
911
"testing"
1012

13+
"github.com/containers/gvisor-tap-vsock/pkg/types"
1114
"github.com/crc-org/crc/v2/pkg/crc/api/client"
15+
crcConfig "github.com/crc-org/crc/v2/pkg/crc/config"
1216

1317
"github.com/sirupsen/logrus"
1418
"github.com/stretchr/testify/assert"
@@ -84,3 +88,69 @@ func TestCheckDaemonVersion_WhenErrorReturnedWhileFetchingVersion_ThenReturnFals
8488
assert.NoError(t, err)
8589
assert.Equal(t, false, result)
8690
}
91+
92+
func TestCreateNewVirtualNetworkConfig(t *testing.T) {
93+
// Given
94+
oldPcapFileEnvVal := os.Getenv("CRC_DAEMON_PCAP_FILE")
95+
err := os.Setenv("CRC_DAEMON_PCAP_FILE", "/tmp/pcapfile")
96+
assert.NoError(t, err)
97+
defer func(key, value string) {
98+
err := os.Setenv(key, value)
99+
assert.NoError(t, err)
100+
}("CRC_DAEMON_PCAP_FILE", oldPcapFileEnvVal)
101+
testCrcConfig := crcConfig.New(crcConfig.NewEmptyInMemoryStorage(), crcConfig.NewEmptyInMemorySecretStorage())
102+
103+
// When
104+
virtualNetworkConfig := createNewVirtualNetworkConfig(testCrcConfig)
105+
106+
// Then
107+
assert.Equal(t, false, virtualNetworkConfig.Debug)
108+
assert.Equal(t, "/tmp/pcapfile", virtualNetworkConfig.CaptureFile)
109+
assert.Equal(t, 4000, virtualNetworkConfig.MTU)
110+
assert.Equal(t, "192.168.127.0/24", virtualNetworkConfig.Subnet)
111+
assert.Equal(t, "192.168.127.1", virtualNetworkConfig.GatewayIP)
112+
assert.ElementsMatch(t, []string{"192.168.127.254"}, virtualNetworkConfig.GatewayVirtualIPs)
113+
assert.Equal(t, "5a:94:ef:e4:0c:dd", virtualNetworkConfig.GatewayMacAddress)
114+
assert.Equal(t, types.Protocol("hyperkit"), virtualNetworkConfig.Protocol)
115+
116+
assert.Len(t, virtualNetworkConfig.DHCPStaticLeases, 1)
117+
assert.Equal(t, "5a:94:ef:e4:0c:ee", virtualNetworkConfig.DHCPStaticLeases["192.168.127.2"])
118+
119+
assert.Len(t, virtualNetworkConfig.DNS, 4)
120+
assert.Equal(t, "apps-crc.testing.", virtualNetworkConfig.DNS[0].Name)
121+
assert.Equal(t, net.ParseIP("192.168.127.2"), virtualNetworkConfig.DNS[0].DefaultIP)
122+
assert.Equal(t, "crc.testing.", virtualNetworkConfig.DNS[1].Name)
123+
assert.Equal(t, "host", virtualNetworkConfig.DNS[1].Records[0].Name)
124+
assert.Equal(t, net.ParseIP("192.168.127.254"), virtualNetworkConfig.DNS[1].Records[0].IP)
125+
assert.Equal(t, "gateway", virtualNetworkConfig.DNS[1].Records[1].Name)
126+
assert.Equal(t, net.ParseIP("192.168.127.1"), virtualNetworkConfig.DNS[1].Records[1].IP)
127+
assert.Equal(t, "api", virtualNetworkConfig.DNS[1].Records[2].Name)
128+
assert.Equal(t, net.ParseIP("192.168.127.2"), virtualNetworkConfig.DNS[1].Records[2].IP)
129+
assert.Equal(t, "api-int", virtualNetworkConfig.DNS[1].Records[3].Name)
130+
assert.Equal(t, net.ParseIP("192.168.127.2"), virtualNetworkConfig.DNS[1].Records[3].IP)
131+
assert.Equal(t, regexp.MustCompile("crc-(.*?)-master-0"), virtualNetworkConfig.DNS[1].Records[4].Regexp)
132+
assert.Equal(t, net.ParseIP("192.168.126.11"), virtualNetworkConfig.DNS[1].Records[4].IP)
133+
134+
assert.Equal(t, "containers.internal.", virtualNetworkConfig.DNS[2].Name)
135+
assert.Len(t, virtualNetworkConfig.DNS[2].Records, 1)
136+
assert.Equal(t, "gateway", virtualNetworkConfig.DNS[2].Records[0].Name)
137+
assert.Equal(t, net.ParseIP("192.168.127.254"), virtualNetworkConfig.DNS[2].Records[0].IP)
138+
assert.Equal(t, "docker.internal.", virtualNetworkConfig.DNS[3].Name)
139+
assert.Len(t, virtualNetworkConfig.DNS[3].Records, 1)
140+
assert.Equal(t, "gateway", virtualNetworkConfig.DNS[3].Records[0].Name)
141+
assert.Equal(t, net.ParseIP("192.168.127.254"), virtualNetworkConfig.DNS[3].Records[0].IP)
142+
}
143+
144+
func TestCreateNewVirtualNetworkConfig_WhenHostNetworkConfigSet_ThenSetNAT(t *testing.T) {
145+
// Given
146+
testCrcConfig := crcConfig.New(crcConfig.NewEmptyInMemoryStorage(), crcConfig.NewEmptyInMemorySecretStorage())
147+
testCrcConfig.AddSetting("host-network-access", false, crcConfig.ValidateBool, crcConfig.SuccessfullyApplied, "test message")
148+
_, err := testCrcConfig.Set(crcConfig.HostNetworkAccess, true)
149+
assert.NoError(t, err)
150+
151+
// When
152+
virtualNetworkConfig := createNewVirtualNetworkConfig(testCrcConfig)
153+
154+
// Then
155+
assert.Equal(t, "127.0.0.1", virtualNetworkConfig.NAT["192.168.127.254"])
156+
}

0 commit comments

Comments
 (0)