Testing IPv6 from iPhone - iphone

I need to test IPv6 connection from iPhone app. I followed this and everything is running alright. But testing for IPv6 fails with "No IPv6 address detected".
One thing I am not clear about is: The doc says that I should use the NAT64 Network - I suppose that just means connecting to the name of the wi-fi network created?
Any help or have you had any issues with this?

As per apple compliance we are not connecting to IPv6 endpoint, which is an IPv6 network that continues to provide access to IPv4 content through translation (DNS64/NAT64). Simply, provider network is IPv4 and translating it to IPv6 network as per apple compliance.if you have actual IPv6 then testing will succeed.

Related

Flutter app: can server have IPv4 address and client IPv6 address?

I am creating an application with Flutter and it needs IPv6 compatibility for App Store. My server is using a IPv4 address, and the application is working as intended when the client is in IPv4 network. The server (Python) creates a socket for IPv6 addresses (AF_INET6) and Dart has
static Future<RawDatagramSocket> rDgS =
RawDatagramSocket.bind(InternetAddress.anyIPv6, [port number]);
I am using UDP.
Can I connect a client from a IPv6-only network to my server that uses IPv4 address? The server has both IPv4 and IPv6 addresses available, but currently only one can be used.
Is it possible to check the client's connection type (IPv4/IPv6) using Dart (Flutter) and then connect to the server using the correct IP-address? If yes, how?
If this works, I assume it works for both Android and iOS devices?
Currently, I am unavailable to create a IPv6-only network to test the changes and I am trying to get it working. Since I am working with a tight schedule, I am asking this in advance.

Why does grpc convert all ipv4 addresses into ipv6 to start a tcp server

According to native GRPC implementation, here: https://github.com/grpc/grpc/blob/master/src/core/lib/iomgr/tcp_server_custom.cc#L381
all ipv4 addresses are changed into ipv6 before the socket is opened here:
https://github.com/grpc/grpc/blob/master/src/core/lib/iomgr/tcp_uv.cc#L191
At least on CentOS this leads to grpc server being unable to start listening.
Can anyone please clarify why was this conversion made, why not just forward all ipv4 and ipv6 addresses straight into the socket and let them be managed by their original addresses?
Right now I am considering commenting this conversion out because I need this server on the environment without ipv6, but I am not sure if I am going to break anything by doing this...maybe there is some hidden dependency on the fact that we are always listening on ipv6 address?

IPv6 gateway to IPv4 address

I am looking for a gateway service to transform an IPv6 address to an IPv4. I have a VPS connected to an IPv6 Network but my ISP is on IPv4. So I can't (or don't know how) connect via SSH to my VPS server.
I will appreciate any suggestions?
So you have a client machine on an ipv4-only network and you want to ssh into a machine on an ipv6-only network.
There are a few options.
6to4, works automatically through relays found by internet routing. 6to4 gateway machine must have a public IPv4 address. ipv6 address block is derived from ipv4 address. Relays are sometimes overloaded leading to poor performance.
teredo, works through relays found by internet routing but requires a configured server for connection setup. Several operators run free public teredo servers. Works from behind most NATs. Can be a bit fragile and relays are often overloaded.
configured point to point tunnels either free or paid for. Well-known free operators include Hurricane Electric and gogo6. Free tunnels may have restrictions on allowed protocols and/or poor performance.

Using socket in C how can I send message from IPv6 to IPv4?

I tried to convert the destination address to IPv6 format as ::ffff:IPv4. And use a socket of AF_INET6 type. It gives error: Network Unreachable. But using the same technique I am able to communicate from IPV4 to IPV6
Thanks for your help in advance.
IPv4 and IPv6 are separate protocols. They don't talk to each other.
On some operating systems you can use an IPv6 socket and accept incoming IPv4 connections on it. But that is just a software thing to make code development easier for server code. I have never seen that work for client code. You'll have to create the right socket type for that.
Usually you resolve a hostname using DNS, you'll get multiple answers (IPv4 and IPv6), you iterate over them creating the required socket type and try to connect. If it works you use that socket, if not you do the next iteration which creates a new socket etc.
If you code that is sensitive to delays you might want to implement the happy eyeballs algorithm.
On most systems, PF_INET6 sockets are able to communicate with IPv4 addresses by using addresses in the ::FFFF:0:0/96 range. However, this is only done at the level of the sockets library: the actual on-the-wire data are plain IPv4 packets (as though you had used an PF_INET socket), there is no protocol conversion in the network.
The error you receive indicates that you have no IPv4 route to the requested destination. This probably indicates that your host doesn't have an IPv4 default route. There is no solution to that — without IPv4 connectivity, there is nothing you can do to reach an IPv4 address.

How to communicate between two embedded devices over ethernet?

I am not expert on this subject, need your suggestions. I have a few devices on ethernet/LAN. I wanted to have these devices communicate over LAN without going into their network configurations. Below is my plan, please let me know if this can be achievable:
1) I install TCP/IP stack on these devices
2) I give them their hostnames like device1, device 2 etc....
3) I configure these devices for local-link networking, so that they can configure themselves and get their IPs.
4) I use socket programming and access each device by using hostnames.
Please let me know if this can be done without much hassle, and let me know if I have missed out something in above mentioned points.
Thanks in advance.
This is basically a good approach.
If your embedded devices have a good IPv6 stack, I recommend using it instead of IPv4. link local addresses work better with IPv6. Most IPv4 stacks are configured to try to obtain an address from a DHCP server first, and only fall back to link local addresses if they can't get one. The link local address and DHCP address might be mutually exclusive, so the link local address doesn't become operational until after DHCP has been tried and timed out. The link local address might even be disrupted if DHCP periodically retries. Although the devices will normally be connected to each other and there won't be a DHCP server, you don't want to disable DHCP, because the devices probably should obtain a DHCP address if they are ever connected to a wider network. With IPv6 on the other hand, the link local addresses come up immediately when the interface comes up, and stay up continuously while other IP addresses (from autoconf or from DHCPv6) may come and go.
Link local addresses alone won't let the devices contact each other by hostname, but dns-sd (mDNS, zeroconf) will. If you are using Linux then you can use avahi as a dns-sd stack.
Better than using hostnames, consider having the devices probe for each other by dns-sd service type. If you are using a custom protocol between your devices, make up a unique service tpe name and have the devices advertise themselves it and probe for it with dns-sd.