I use drone with nftables. For nftables, I need to set the ip address and port to allow the drone/git, otherwise during cloning I get an error : Could not resolve host: gitlab.com
Drone and agent server run configuration:
docker run --ip 172.17.0.2 \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--volume=/var/lib/drone:/data \
--env=DRONE_GITLAB_SERVER=https://gitlab.com \
--env=DRONE_GITLAB_CLIENT_ID=XXXXXXXXXXXXXXXXXXXXXX \
--env=DRONE_GITLAB_CLIENT_SECRET=XXXXXXXXXXXXXXXXXXXXXXXX \
--env=DRONE_RPC_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXXX \
--env=DRONE_RUNNER_CAPACITY=10 \
--env=DRONE_SERVER_HOST=ci.example.com \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_TLS_AUTOCERT=false \
--env=DRONE_USER_CREATE=username:some_my_account,admin:true \
--env=DRONE_LOGS_DEBUG=false \
--env=DRONE_AGENTS_ENABLED=false \
--env=TZ=Europe/Moscow \
--publish=81:80 \
--restart=always \
--detach=true \
--name=drone \
drone/drone
docker run --ip 172.17.0.3 \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--env=DRONE_RPC_SERVER=http://ci.example.com \
--env=DRONE_RPC_SECRET=XXXXXXXXXXXXXXXXXXXXXXXXX \
--env=DRONE_RUNNER_CAPACITY=10 \
--env=DRONE_RUNNER_NAME=XXXXXXXXXXXXXXXXXXXXXXXX \
--publish=127.0.0.1:3000:3000 \
--restart=always \
--detach=true \
--name=agent \
drone/agent
/etc/docker/daemon.json
{
"iptables": false,
"fixed-cidr": "172.17.0.0/16"
}
/lib/systemd/system/docker.service
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H fd:// -H tcp://0.0.0.0:2375
nftables.config:
table ip nat {
chain PREROUTING {
fib daddr type local jump DOCKER
}
chain POSTROUTING {
oifname != "docker0" ip saddr 172.17.0.0/16 masquerade
ip saddr 172.17.0.2 ip daddr 172.17.0.2 tcp dport 81 masquerade
ip saddr 172.17.0.3 ip daddr 172.17.0.3 tcp dport 3000 masquerade
ip saddr 172.17.0.5 ip daddr 172.17.0.5 tcp dport 5432 masquerade
}
chain OUTPUT {
ip daddr != 127.0.0.0/8 fib daddr type local jump DOCKER
}
chain DOCKER {
iifname "docker0" return
iifname != "docker0" ip daddr 127.0.0.1 tcp dport 81 dnat to 172.17.0.2:81
iifname != "docker0" ip daddr 127.0.0.1 tcp dport 3000 dnat to 172.17.0.3:3000
iifname != "docker0" ip daddr 127.0.0.1 tcp dport 5432 dnat to 172.17.0.5:5432
}
}
table inet filter {
chain INPUT {
type filter hook input priority filter; policy drop;
iifname "lo" accept
icmp type echo-request accept
ct state established,related accept
tcp dport { 22, 80, 443 } counter accept
}
chain FORWARD {
type filter hook forward priority filter; policy drop;
oifname "docker0" ct state established,related accept
oifname "docker0" jump DOCKER
iifname "docker0" oifname != "docker0" accept
iifname "docker0" oifname "docker0" accept
jump DOCKER-USER
jump DOCKER-ISOLATION-STAGE-1
}
chain DOCKER-USER {
return
}
chain DOCKER {
iifname != "docker0" oifname "docker0" ip daddr 172.17.0.2 tcp dport 81 accept
iifname != "docker0" oifname "docker0" ip daddr 172.17.0.3 tcp dport 3000 accept
iifname != "docker0" oifname "docker0" ip daddr 172.17.0.5 tcp dport 5432 accept
}
chain DOCKER-ISOLATION-STAGE-1 {
iifname "docker0" oifname != "docker0" jump DOCKER-ISOLATION-STAGE-2
return
}
syslog during clone:
Jun 13 11:51:55 myhostname systemd-udevd[42985]: Using default interface naming scheme 'v245'.
Jun 13 11:51:55 myhostname systemd-udevd[42985]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
Jun 13 11:51:55 myhostname systemd[4740]: var-lib-docker-overlay2-3e12b2b60a9f2f8fd8bccb481338e9f5f0409adfda3df3ec3bbd045865dfa7b1\x2dinit-merged.mount: Succeeded.
Jun 13 11:51:55 myhostname systemd[1]: var-lib-docker-overlay2-3e12b2b60a9f2f8fd8bccb481338e9f5f0409adfda3df3ec3bbd045865dfa7b1\x2dinit-merged.mount: Succeeded.
Jun 13 11:51:55 myhostname systemd[4740]: var-lib-docker-overlay2-3e12b2b60a9f2f8fd8bccb481338e9f5f0409adfda3df3ec3bbd045865dfa7b1-merged.mount: Succeeded.
Jun 13 11:51:55 myhostname systemd[1]: var-lib-docker-overlay2-3e12b2b60a9f2f8fd8bccb481338e9f5f0409adfda3df3ec3bbd045865dfa7b1-merged.mount: Succeeded.
Jun 13 11:51:55 myhostname kernel: [299241.717612] br-906e09917cef: port 1(vethc7cb20e) entered blocking state
Jun 13 11:51:55 myhostname kernel: [299241.717613] br-906e09917cef: port 1(vethc7cb20e) entered disabled state
Jun 13 11:51:55 myhostname kernel: [299241.717717] device vethc7cb20e entered promiscuous mode
Jun 13 11:51:55 myhostname kernel: [299241.719740] br-906e09917cef: port 1(vethc7cb20e) entered blocking state
Jun 13 11:51:55 myhostname kernel: [299241.719741] br-906e09917cef: port 1(vethc7cb20e) entered forwarding state
Jun 13 11:51:55 myhostname kernel: [299241.719778] br-906e09917cef: port 1(vethc7cb20e) entered disabled state
Jun 13 11:51:55 myhostname systemd-udevd[42995]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
Jun 13 11:51:55 myhostname systemd-udevd[42995]: Using default interface naming scheme 'v245'.
Jun 13 11:51:55 myhostname systemd-udevd[42995]: vethabfac44: Could not generate persistent MAC: No data available
Jun 13 11:51:55 myhostname systemd-udevd[42985]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
Jun 13 11:51:55 myhostname systemd-udevd[42985]: vethc7cb20e: Could not generate persistent MAC: No data available
Jun 13 11:51:55 myhostname containerd[595]: time="2022-06-13T11:51:55.179450760+03:00" level=info msg="loading plugin \"io.containerd.event.v1.publisher\"..." runtime=io.containerd.runc.v2 type=io.containerd.event.v1
Jun 13 11:51:55 myhostname containerd[595]: time="2022-06-13T11:51:55.181718639+03:00" level=info msg="loading plugin \"io.containerd.internal.v1.shutdown\"..." runtime=io.containerd.runc.v2 type=io.containerd.internal.v1
Jun 13 11:51:55 myhostname containerd[595]: time="2022-06-13T11:51:55.182007818+03:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.task\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
Jun 13 11:51:55 myhostname containerd[595]: time="2022-06-13T11:51:55.182427373+03:00" level=info msg="starting signal loop" namespace=moby path=/run/containerd/io.containerd.runtime.v2.task/moby/2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e pid=43020 runtime=io.containerd.runc.v2
Jun 13 11:51:55 myhostname systemd[4740]: run-docker-runtime\x2drunc-moby-2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e-runc.FHikpt.mount: Succeeded.
Jun 13 11:51:55 myhostname systemd[1]: run-docker-runtime\x2drunc-moby-2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e-runc.FHikpt.mount: Succeeded.
Jun 13 11:51:55 myhostname kernel: [299242.030629] eth0: renamed from vethabfac44
Jun 13 11:51:55 myhostname kernel: [299242.030938] IPv6: ADDRCONF(NETDEV_CHANGE): vethc7cb20e: link becomes ready
Jun 13 11:51:55 myhostname kernel: [299242.030978] br-906e09917cef: port 1(vethc7cb20e) entered blocking state
Jun 13 11:51:55 myhostname kernel: [299242.030979] br-906e09917cef: port 1(vethc7cb20e) entered forwarding state
Jun 13 11:51:55 myhostname kernel: [299242.031005] IPv6: ADDRCONF(NETDEV_CHANGE): br-906e09917cef: link becomes ready
Jun 13 11:52:00 myhostname dockerd[41859]: time="2022-06-13T11:52:00.518594332+03:00" level=info msg="ignoring event" container=2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Jun 13 11:52:00 myhostname containerd[595]: time="2022-06-13T11:52:00.519848569+03:00" level=info msg="shim disconnected" id=2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e
Jun 13 11:52:00 myhostname containerd[595]: time="2022-06-13T11:52:00.520387530+03:00" level=warning msg="cleaning up after shim disconnected" id=2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e namespace=moby
Jun 13 11:52:00 myhostname containerd[595]: time="2022-06-13T11:52:00.520582800+03:00" level=info msg="cleaning up dead shim"
Jun 13 11:52:00 myhostname containerd[595]: time="2022-06-13T11:52:00.541259951+03:00" level=warning msg="cleanup warnings time=\"2022-06-13T11:52:00+03:00\" level=info msg=\"starting signal loop\" namespace=moby pid=43111 runtime=io.containerd.runc.v2\n"
Jun 13 11:52:00 myhostname kernel: [299247.143942] br-906e09917cef: port 1(vethc7cb20e) entered disabled state
Jun 13 11:52:00 myhostname kernel: [299247.144235] vethabfac44: renamed from eth0
Jun 13 11:52:00 myhostname kernel: [299247.153394] br-906e09917cef: port 1(vethc7cb20e) entered disabled state
Jun 13 11:52:00 myhostname kernel: [299247.154161] device vethc7cb20e left promiscuous mode
Jun 13 11:52:00 myhostname kernel: [299247.154164] br-906e09917cef: port 1(vethc7cb20e) entered disabled state
Jun 13 11:52:00 myhostname systemd-udevd[43130]: vethabfac44: Failed to get link config: No such device
Jun 13 11:52:00 myhostname systemd-udevd[43130]: vethabfac44: Failed to get link config: No such device
Jun 13 11:52:01 myhostname dockerd[41859]: time="2022-06-13T11:52:01.999208934+03:00" level=warning msg="[resolver] connect failed: dial udp 188.120.247.2:53: connect: network is unreachable"
Jun 13 11:52:01 myhostname dockerd[41859]: time="2022-06-13T11:52:01.999272184+03:00" level=warning msg="[resolver] connect failed: dial udp 185.60.132.11:53: connect: network is unreachable"
Jun 13 11:52:01 myhostname dockerd[41859]: time="2022-06-13T11:52:01.999324934+03:00" level=warning msg="[resolver] connect failed: dial udp 188.120.247.2:53: connect: network is unreachable"
Jun 13 11:52:02 myhostname dockerd[41859]: time="2022-06-13T11:52:01.999347286+03:00" level=warning msg="[resolver] connect failed: dial udp 185.60.132.11:53: connect: network is unreachable"
Jun 13 11:52:03 myhostname dockerd[41859]: time="2022-06-13T11:52:03.496466830+03:00" level=warning msg="[resolver] connect failed: dial udp 185.60.132.11:53: connect: network is unreachable"
Jun 13 11:52:03 myhostname dockerd[41859]: time="2022-06-13T11:52:03.496574865+03:00" level=warning msg="[resolver] connect failed: dial udp 185.60.132.11:53: connect: network is unreachable"
Jun 13 11:52:03 myhostname systemd[1]: run-docker-netns-3bd048c65f41.mount: Succeeded.
Jun 13 11:52:03 myhostname systemd[4740]: run-docker-netns-3bd048c65f41.mount: Succeeded.
Jun 13 11:52:03 myhostname systemd[4740]: var-lib-docker-containers-2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e-mounts-shm.mount: Succeeded.
Jun 13 11:52:03 myhostname systemd[1]: var-lib-docker-containers-2fc5085cc390983e34dd83cecfe5cba3295ee36cb0d6de4db69738469bb8b50e-mounts-shm.mount: Succeeded.
Jun 13 11:52:03 myhostname systemd[1]: var-lib-docker-overlay2-3e12b2b60a9f2f8fd8bccb481338e9f5f0409adfda3df3ec3bbd045865dfa7b1-merged.mount: Succeeded.
Jun 13 11:52:03 myhostname systemd[4740]: var-lib-docker-overlay2-3e12b2b60a9f2f8fd8bccb481338e9f5f0409adfda3df3ec3bbd045865dfa7b1-merged.mount: Succeeded.
Drone server and agent can ping gitlab.com because they are allowed in nftables.
How can I set the ip and port for the drone/git manually?
Maybe I can assemble the drone/git image manually and specify the IP address there?