Conversation
|
@guillaumerose: PR needs rebase. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
|
@guillaumerose Are you still working on this? |
|
No, not anymore but it was working fine. A user tested it also with success. |
|
I do not see a compelling benefit for our VM setup. The rebase is quite trivial, but we do not have much time on our end to experiment with this. as mentioned it is not a compelling change for us. OpenShift has to run in a dual stack setup and has to use OVN-Kubernetes cluster network provider, which in our tests consumes a lot more resources (which causes the current defaults to be insufficient). |
|
It need rebase and also |
|
@gbraad the value is that this would just prepare the codebase for the future. ipv4 is a relic of the past that's on life support because it's "good enough" right now while companies struggle to get subnet assignments. |
|
I understand, but there is no one on my team who can reserve time for this in the coming weeks. As this is not something we can use now. It will actually adversely affect us if we fully support this. Our prio is on filesharing to running on Arm/M1. Note: routes are exposed on the local machine for crc. The internal network (vm) is mostly abstracted from the user. This is why the benefits arent as big on our end. The only requests we received were around 'testing' and 'getting experience', though our primary usecase is for development of applications running on the cluster. Added to sprint 223 of CRC; but can't promise we will work on this. |
The 'hacks' remains a commit without clear definition what made them called as such. |
|
It's definitely nowhere near urgent to get this rolled out. In December, I could put some effort into this. This was something I tried working on last year, but I ran out of time last year. |
|
We prioritized this as part of the crc Podman bundle. Definitely will happen before December. Might ask you for testing/confirmation. After my PTO have to reinstall my router and switch anyway due to a mistake so will make Ipv6 a priority 😝. |
Definitely happy to help out with that. Even though I left Red Hat earlier this year, I still have a vested personal interest in tools like gvproxy. |
What are you using it for? |
|
Been working on using Apple's virtualization framework in place of QEMU for some stability + performance gains to be had with the virtiofs support. Qemu hasn't been very fun since upgrading to the M1 in my experience, but I have a desire to continue using podman over Docker Desktop. Also have a code base that I'll be revisiting from last December where I began working on a re-write for gvproxy. It's not exactly secure, because of the access to |
|
@protosam We have a driver for this, vfkit that uses vz. However we recently had to fork this driver as the upstream owner is not very helpful: crc-org/crc#3362 it might be an idea to talk to @cfergeau. |
|
@gbraad Will follow up in that issue. I'm open to contributing on an eco-system around the vz code base, because I'm already using it. |
|
I've rebased this branch in https://github.com/cfergeau/gvisor-tap-vsock/tree/ipv6 it builds but I haven't tested it. |
|
Any plans for this feature ?? I tried this patch with latest but facing issues not able to resolve it 😕 |
|
Feature is planned, but very low priority at the moment :-/ |
|
@cfergeau Why is it low priority? IPv6 is very essential and basic on nowadays' Internet? |
|
@sanmai-NL The nowadays internet is still mostly IPv4 based. As an example, GitHub does not even have an IPv6 address, so it means you have to run a hybrid stack (or proxy). Since we have to prioritize tasks to work on, we have decided first to resolve the virtualization of Podman Machine on macOS and moving to vfkit (instead of Qemu); we experienced issues with qemu+virtio. After this we will first refactor the codebase and improve the buffers. IPv6 will happen at some point, just need to be more strategic. Hope you understand. Do you have a specific usecase that otherwise will not work? |
Our company network is IPv6 only. Which makes pulling from our internal registry impossible using Podman Desktop (and Docker Desktop) on mac. Just found out the hard way. |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: guillaumerose The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
I’ve force pushed @karta0807913 to the |
|
Tested on macOS with vfkit. Verified IPv6 is working as expected: |
|
Hello @cfergeau. I believe I've removed all the hacks from the original branch. Hardcoded IPv6 host address:https://github.com/guillaumerose/gvisor-tap-vsock/blob/ad3efa432587e6c2bdf370a3fd5cf793bca1f4e4/pkg/tap/link.go#L133-L142 No IPv6 neighbor discovery, only internet access was possibleSo, I added the entire IPv6 component stack, including:
P.S. Please help me re-push the branch. I used my work email to commit accidentally. |
It used by NDP protocol.
Adjust to newer gvisor API
Adjust to newer gvisor API Not fully sure about the buffer changes in pkg/tap/router_advertisement.go This integrates some fixes from Chuxuan Liang PR.
This reverts commit cd7dcea. These tests currently do not build, we’ll need to make a decision whether to fix them or drop them.
* pkg/tap/ip_pool.go support ipv6 Ip address * support ipv6 advertisement in switch.go
Change-Id: I3f05edf028513329e2f905d18e3ceb290e52c539
Change-Id: Iccbfa76ada834a28e1a40e0c4a0e5b70ec830aae
@karta0807913 This should now be all good, I’ve used "karta0807913" and your gmail address in all commits. Let me know if I missed some places. We’ll need |
thanks @cfergeau. I have updated my ipv6 branch and fixed the unit test errors. Also, I think some of the lint errors can be ignored. For example, |
You could add a |
| func NewIPPool(base *net.IPNet) *IPPool { | ||
| start := big.NewInt(0) | ||
| start.SetBytes(base.IP.To16()) | ||
| start.Add(start, big.NewInt(1)) |
There was a problem hiding this comment.
https://pkg.go.dev/net/netip#Addr seems to offer similar features?
| continue | ||
| candidate := net.IP(ipBytes) | ||
| if !p.base.Contains(candidate) { | ||
| return nil, errors.New("cannot find available IP") |
There was a problem hiding this comment.
Would using https://pkg.go.dev/net/netip#Prefix instead of net.IPNet make this code simpler?
There was a problem hiding this comment.
https://djosephsen.github.io/posts/ipnet/ gives some details about these different APIs
There was a problem hiding this comment.
all done. :)
P.S. i cannot push on branch guillaumerose:ipv62. so i update on my branch
|
@guillaumerose @cfergeau @karta0807913 @vyasgun Thank you for your work on this PR! I tried to use Steps to reproduce:
So to results: tcpdump output: # sudo tcpdump -ni enp0s1 -vv icmp6
dropped privs to tcpdump
tcpdump: listening on enp0s1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
11:51:49.239918 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:51:50.286313 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:51:51.311262 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:52:50.018201 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:52:51.024624 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:52:52.046314 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:53:53.420391 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fe80::fb99:872d:7a83:dec6 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:54:53.148541 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:54:54.158798 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:54:55.182480 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:55:58.696527 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fe80::fb99:872d:7a83:dec6 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:17.490925 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:18.510259 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:19.536668 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:43.562896 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) 2a02:6b8:0:3400:0:7ff3:0:2 > fe80::fb99:872d:7a83:dec6: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::fb99:872d:7a83:dec6
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:dd
0x0000: 5a94 efe4 0cdd
11:56:43.563061 IP6 (hlim 255, next-header ICMPv6 (58), payload length 24) fe80::fb99:872d:7a83:dec6 > 2a02:6b8:0:3400:0:7ff3:0:2: [icmp6 sum ok] ICMP6, neighbor advertisement, length 24, tgt is fe80::fb99:872d:7a83:dec6, Flags [solicited]
11:56:49.039219 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fe80::fb99:872d:7a83:dec6 > 2a02:6b8:0:3400:0:7ff3:0:2: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2a02:6b8:0:3400:0:7ff3:0:2
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:50.063178 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fe80::fb99:872d:7a83:dec6 > 2a02:6b8:0:3400:0:7ff3:0:2: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2a02:6b8:0:3400:0:7ff3:0:2
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:51.086688 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fe80::fb99:872d:7a83:dec6 > 2a02:6b8:0:3400:0:7ff3:0:2: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has 2a02:6b8:0:3400:0:7ff3:0:2
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:56.233742 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:57.295801 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:56:58.320148 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fd00::2 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
11:57:59.364807 IP6 (hlim 255, next-header ICMPv6 (58), payload length 32) fe80::fb99:872d:7a83:dec6 > ff02::1:ff00:1: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::1
source link-address option (1), length 8 (1): 5a:94:ef:e4:0c:ee
0x0000: 5a94 efe4 0cee
^C
23 packets captured
23 packets received by filter
0 packets dropped by kernelcurl output: # curl -6 -vk --connect-timeout 5 https://[2a02:6b8:0:3400:0:7ff3:0:2]/
* Trying [2a02:6b8:0:3400:0:7ff3:0:2]:443...
* connect to 2a02:6b8:0:3400:0:7ff3:0:2 port 443 from fd00::2 port 44830 failed: No route to host
* Failed to connect to 2a02:6b8:0:3400:0:7ff3:0:2 port 443 after 3059 ms: Could not connect to server
* closing connection #0
curl: (7) Failed to connect to 2a02:6b8:0:3400:0:7ff3:0:2 port 443 after 3059 ms: Could not connect to serverThe problem is IPv6-only host is not reacheable from VM. This workaround helps on VM ( root@localhost:~# ip -6 neigh replace fe80::1 lladdr 5a:94:ef:e4:0c:dd dev enp0s1 nud permanent
root@localhost:~# ip -6 neigh show dev enp0s1
fe80::1 lladdr 5a:94:ef:e4:0c:dd PERMANENT
fd00::1 lladdr 5a:94:ef:e4:0c:dd STALE
2a01:230:2::a5 FAILEDAfter that # curl -6 -vk --connect-timeout 5 https://[2a02:6b8:0:3400:0:7ff3:0:2]/
* Trying [2a02:6b8:0:3400:0:7ff3:0:2]:443...
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-ECDSA-AES128-GCM-SHA256 / x25519 / id-ecPublicKey
* ALPN: server accepted http/1.1
* Server certificate:
...[skipped]...
* Connected to 2a02:6b8:0:3400:0:7ff3:0:2 (2a02:6b8:0:3400:0:7ff3:0:2) port 443
* using HTTP/1.x
> GET / HTTP/1.1
> Host: [2a02:6b8:0:3400:0:7ff3:0:2]
> User-Agent: curl/8.15.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 404 Not found
< Content-Length: 0
<
* Connection #0 to host 2a02:6b8:0:3400:0:7ff3:0:2 left intact |
|
hi @arikon. thanks for your testing! i made a mistake that we should also accepts the ICMPv6 package from the link local address |
|
PR needs rebase. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
This PR adds IPv6 support. I still need to refactor some code esp. the 2 hacks needed.
At least, we have something working!