Skip to content

Commit 55d04cb

Browse files
committed
Fix opening on TCP ports on GCE for inlets-pro
This PR will now allow for all TCP traffic through the inlets-pro exit node If a firewall-rule for inlets or inlets-pro named 'inlets' already exists, then it will update the firewall-rule with the required rules depending on the user using the `--remote-tcp` flag (inlets-pro) or not in `inletsctl create` command Fixes inlets#44 Fixes inlets#56 Signed-off-by: Utsav Anand <[email protected]>
1 parent d5f56b6 commit 55d04cb

File tree

4 files changed

+49
-36
lines changed

4 files changed

+49
-36
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
/inletsctl
22
/bin/**
33
.idea/
4+
.DS_Store

cmd/create.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ func createHost(provider, name, region, zone, projectID, userData, inletsPort st
311311
"zone": zone,
312312
"firewall-name": "inlets",
313313
"firewall-port": inletsPort,
314+
"pro": fmt.Sprint(pro),
314315
},
315316
}, nil
316317
} else if provider == "ec2" {

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ require (
1717
github.com/spf13/cobra v0.0.5
1818
github.com/spf13/pflag v1.0.5
1919
go.opencensus.io v0.22.2 // indirect
20-
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 // indirect
2120
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933 // indirect
2221
golang.org/x/oauth2 v0.0.0-20191122200657-5d9234df094c
2322
golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9 // indirect

pkg/provision/gce.go

Lines changed: 47 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -93,17 +93,9 @@ func (p *GCEProvisioner) Provision(host BasicHost) (*ProvisionedHost, error) {
9393
},
9494
}
9595

96-
exists, _ := p.gceFirewallExists(host.Additional["projectid"], host.Additional["firewall-name"], host.Additional["firewall-port"])
97-
98-
if !exists {
99-
err := p.createInletsFirewallRule(host.Additional["projectid"], host.Additional["firewall-name"], host.Additional["firewall-port"])
100-
log.Println("inlets firewallRule does not exist")
101-
if err != nil {
102-
return nil, fmt.Errorf("could not create inlets firewall rule: %v", err)
103-
}
104-
log.Printf("Creating inlets firewallRule opening port: %s\n", host.Additional["firewall-port"])
105-
} else {
106-
log.Println("inlets firewallRule exists")
96+
err := p.createInletsFirewallRule(host.Additional["projectid"], host.Additional["firewall-name"], host.Additional["firewall-port"], host.Additional["pro"])
97+
if err != nil {
98+
return nil, err
10799
}
108100

109101
op, err := p.gceProvisioner.Instances.Insert(host.Additional["projectid"], host.Additional["zone"], instance).Do()
@@ -116,53 +108,73 @@ func (p *GCEProvisioner) Provision(host BasicHost) (*ProvisionedHost, error) {
116108
if op.Status == gceHostRunning {
117109
status = ActiveStatus
118110
}
119-
120111
return &ProvisionedHost{
121112
ID: toGCEID(host.Name, host.Additional["zone"], host.Additional["projectid"]),
122113
Status: status,
123114
}, nil
124115
}
125116

126117
// gceFirewallExists checks if the inlets firewall rule exists or not
127-
func (p *GCEProvisioner) gceFirewallExists(projectID string, firewallRuleName string, controlPort string) (bool, error) {
118+
func (p *GCEProvisioner) gceFirewallExists(projectID string, firewallRuleName string) (bool, error) {
128119
op, err := p.gceProvisioner.Firewalls.Get(projectID, firewallRuleName).Do()
129120
if err != nil {
130121
return false, fmt.Errorf("could not get inlets firewall rule: %v", err)
131122
}
132123
if op.Name == firewallRuleName {
133-
for _, firewallRule := range op.Allowed {
134-
for _, port := range firewallRule.Ports {
135-
if port == controlPort {
136-
return true, nil
137-
}
138-
}
139-
}
124+
return true, nil
140125
}
141126
return false, nil
142127
}
143128

144129
// createInletsFirewallRule creates a firewall rule opening up the control port for inlets
145-
func (p *GCEProvisioner) createInletsFirewallRule(projectID string, firewallRuleName string, controlPort string) error {
146-
firewallRule := &compute.Firewall{
147-
Name: firewallRuleName,
148-
Description: "Firewall rule created by inlets-operator",
149-
Network: fmt.Sprintf("projects/%s/global/networks/default", projectID),
150-
Allowed: []*compute.FirewallAllowed{
151-
{
152-
IPProtocol: "tcp",
153-
Ports: []string{controlPort},
130+
func (p *GCEProvisioner) createInletsFirewallRule(projectID string, firewallRuleName string, controlPort string, pro string) error {
131+
var firewallRule *compute.Firewall
132+
if pro == "true" {
133+
firewallRule = &compute.Firewall{
134+
Name: firewallRuleName,
135+
Description: "Firewall rule created by inlets-operator",
136+
Network: fmt.Sprintf("projects/%s/global/networks/default", projectID),
137+
Allowed: []*compute.FirewallAllowed{
138+
{
139+
IPProtocol: "tcp",
140+
},
154141
},
155-
},
156-
SourceRanges: []string{"0.0.0.0/0"},
157-
Direction: "INGRESS",
158-
TargetTags: []string{"inlets"},
142+
SourceRanges: []string{"0.0.0.0/0"},
143+
Direction: "INGRESS",
144+
TargetTags: []string{"inlets"},
145+
}
146+
} else {
147+
firewallRule = &compute.Firewall{
148+
Name: firewallRuleName,
149+
Description: "Firewall rule created by inlets-operator",
150+
Network: fmt.Sprintf("projects/%s/global/networks/default", projectID),
151+
Allowed: []*compute.FirewallAllowed{
152+
{
153+
IPProtocol: "tcp",
154+
Ports: []string{controlPort},
155+
},
156+
},
157+
SourceRanges: []string{"0.0.0.0/0"},
158+
Direction: "INGRESS",
159+
TargetTags: []string{"inlets"},
160+
}
161+
}
162+
163+
exists, _ := p.gceFirewallExists(projectID, firewallRuleName)
164+
if exists {
165+
log.Println("inlets firewallRule exists, updating firewall-rules")
166+
_, err := p.gceProvisioner.Firewalls.Update(projectID, firewallRuleName, firewallRule).Do()
167+
if err != nil {
168+
return fmt.Errorf("could not update inlets firewall rule: %v", err)
169+
}
170+
return nil
159171
}
160172

161173
_, err := p.gceProvisioner.Firewalls.Insert(projectID, firewallRule).Do()
174+
log.Println("creating inlets firewallRule")
162175
if err != nil {
163-
return fmt.Errorf("could not create firewall rule: %v", err)
176+
return fmt.Errorf("could not create inlets firewall rule: %v", err)
164177
}
165-
166178
return nil
167179
}
168180

0 commit comments

Comments
 (0)