IPv6 Enabling CIFS/SMB Applications



Similar documents
Samba and Vista with IPv6

Deploying Samba in IPv6 Networks

Porting applications & DNS issues. socket interface extensions for IPv6. Eva M. Castro. ecastro@dit.upm.es. dit. Porting applications & DNS issues UPM

CSE 333 SECTION 6. Networking and sockets

Software changes for Website and Application IPv6 Readiness

Best practices in IPv6 enabled networking software development.

Deploying IPv6-only Samba 4 Environments

Domain Name System (1)! gethostbyname (2)! gethostbyaddr (2)!

Porting and Deploying VoIP to IPv6: Lessons Learned

Tutorial on Socket Programming

Elementary Name and Address. Conversions

Programming guidelines on transition to IPv6

IPv6 Applications. Location, country Date. Speaker name (or address)

Introduction to Socket Programming Part I : TCP Clients, Servers; Host information

Concurrent Server Design Alternatives

Socket Programming. Srinidhi Varadarajan

Socket Programming. Kameswari Chebrolu Dept. of Electrical Engineering, IIT Kanpur

IPv6 Applications. Piers O Hanlon

Name and Address Conversions

IPv4/IPv6 Transition for SIP VoIP Applications

IPv6 Applications. Formation IPv6 RENATER -Rouen, FR

IT304 Experiment 2 To understand the concept of IPC, Pipes, Signals, Multi-Threading and Multiprocessing in the context of networking.

NS3 Lab 1 TCP/IP Network Programming in C

ICT SEcurity BASICS. Course: Software Defined Radio. Angelo Liguori. SP4TE lab.

INTRODUCTION UNIX NETWORK PROGRAMMING Vol 1, Third Edition by Richard Stevens

UNIX Sockets. COS 461 Precept 1

Implementing Network Software

Writing a C-based Client/Server

Unix Network Programming

Introduction to Socket programming using C

Socket Programming. Request. Reply. Figure 1. Client-Server paradigm

TCP/IP - Socket Programming

Generalised Socket Addresses for Unix Squeak

The POSIX Socket API

An Overview of IPv6 CHAPTER

Application Architecture

SerNet. Samba Status Update. Linuxkongress Hamburg October 10, Volker Lendecke SerNet Samba Team. Network Service in a Service Network

Joe Davies. Principal Writer Windows Server Information Experience. Presented at: Seattle Windows Networking User Group June 1, 2011

Univention Corporate Server. Operation of a Samba domain based on Windows NT domain services

Windows Socket Programming & IPv6 Translation Middleware

TCP/IP Basis. OSI Model

Beej's Guide to Network Programming

M06 (31-May-2001) Requirements and guidelines for distributed laboratories application migration WP 3

Communication Networks. Introduction & Socket Programming Yuval Rochman

陳 懷 恩 博 士 助 理 教 授 兼 計 算 機 中 心 資 訊 網 路 組 組 長 國 立 宜 蘭 大 學 資 工 所 TEL: # 340

Porting and Running Asterisk to IPv6

Integration with Active Directory. Jeremy Allison Samba Team

Networks class CS144 Introduction to Computer Networking Goal: Teach the concepts underlying networks Prerequisites:

UNIX. Sockets. mgr inż. Marcin Borkowski

IPv6 for SMB s: Easy or Hard?

Exam : Installing and Configuring Windows Server 2012

IPv6 en Windows. Juan Jackson Pablo García

ELEN 602: Computer Communications and Networking. Socket Programming Basics

Vicenza.linux.it\LinuxCafe 1

Moving Grid Systems into the IPv6 Era

Socket Programming in C/C++

BSD Sockets Interface Programmer s Guide

Network Programming with Sockets. Process Management in UNIX

Computer Networks Network architecture

Programmation Systèmes Cours 9 UNIX Domain Sockets

Active Directory network protocols and traffic

A Client Server Transaction. Introduction to Computer Systems /18 243, fall th Lecture, Nov. 3 rd

Elementary Name and Address Conversions

Operating Systems Design 16. Networking: Sockets

Network Analysis Technology for Microsoft Network Visibility

Industry Automation White Paper Januar 2013 IPv6 in automation technology

SerNet. Samba Status Update. Munich 13. March Volker Lendecke SerNet Samba Team. Network Service in a Service Network

Networks. Inter-process Communication. Pipes. Inter-process Communication

Aculab digital network access cards

Performance Evaluation of an IPv6-capable H323 Application

IBM i Version 7.2. Programming Socket programming IBM

virtio-vsock Zero-configuration host/guest communication Stefan Hajnoczi KVM Forum 2015 KVM FORUM 2015 STEFAN HAJNOCZI

Client / Server Programming with TCP/IP Sockets

Windows 7 Resource Kit

Networking Best Practices Guide. Version 6.5

SMB a protocol example

Hostnames. HOSTS.TXT was a bottleneck. Once there was HOSTS.TXT. CSCE515 Computer Network Programming. Hierarchical Organization of DNS

DESIGN AND IMPLEMENT AND ONLINE EXERCISE FOR TEACHING AND DEVELOPMENT OF A SERVER USING SOCKET PROGRAMMING IN C

IPv6 in Axis Video Products

Lab 4: Socket Programming: netcat part

Personal Firewall Default Rules and Components

Writing Client/Server Programs in C Using Sockets (A Tutorial) Part I. Session Greg Granger grgran@sas. sas.com. SAS/C & C++ Support

Chapter 12 Supporting Network Address Translation (NAT)

New DNS Technologies in the LAN

Programming with TCP/IP Best Practices

IPv6 Network Security.

Samba on HP StorageWorks Enterprise File Services (EFS) Clustered File System Software

First Workshop on Open Source and Internet Technology for Scientific Environment: with case studies from Environmental Monitoring

Autoconfiguration Technology for IPv6-based Mobile Ad-hoc Network

CONFIGURING ACTIVE DIRECTORY IN LIFELINE

Recent advances in IPv6 insecurities Marc van Hauser Heuse Deepsec 2010, Vienna Marc Heuse

Internetworking Microsoft TCP/IP on Microsoft Windows NT 4.0

1 Data information is sent onto the network cable using which of the following? A Communication protocol B Data packet

VMCI Sockets Programming Guide VMware ESX/ESXi 4.x VMware Workstation 7.x VMware Server 2.0

416 Distributed Systems. Feb 24, 2016 DNS and CDNs

Using Single Sign-on with Samba. Appendices. Glossary. Using Single Sign-on with Samba. SonicOS Enhanced

Advanced IPv6 Design and Deployment for

Computer Networks. Introduc)on to Naming, Addressing, and Rou)ng. Week 09. College of Information Science and Engineering Ritsumeikan University

Network-Oriented Software Development. Course: CSc4360/CSc6360 Instructor: Dr. Beyah Sessions: M-W, 3:00 4:40pm Lecture 2

Mike Saywell and Tim Chown University of Southampton, UK Global IPv6 Summit, Madrid, 12 th May 2003

Transcription:

IPv6 Enabling CIFS/SMB Applications 2010 Storage Developers Conference Santa Clara Dr David Holder CEng FIET MIEEE david.holder@erion.co.uk http://www.erion.co.uk

Background Erion David Holder Over twelve years in IPv6 Over twenty years Windows networking Author Erion Director IPv6 enabling Samba Erion Ltd Over twelve years providing IPv6 training and consultancy World s leading IPv6 training company

BACK GROUND AND HISTORY

Why is IPv6 so Important Now? Ubiquitous support for IPv6 IPv4 addresses are finally running out Widespread mandates for IPv6 Default on Windows Server 2008 & Windows 7 Default on Linux and Unix You may be using IPv6 and don t know it!

IPv4 Specific IPv6 and Windows Networking Windows Networking Pre Active Directory (NT etc) NetBIOS Over TCP/IP (NBT) NetBIOS NBT WINS SMB NetBIOS cannot be IPv6 enabled Raw SMB over IPv6 works Port Protocol Description 137 UDP NBT Name Service 137 TCP NBT Name Service 138 UDP Datagram service 138 TCP Unused Active Directory Active Directory DNS LDAP CLDAP Kerberos SMB/CIFS 139 UDP Unused 139 TCP Session Service 445 TCP Raw SMB over TCP/IP Active Directory: DNS, LDAP, CLDAP, Kerberos, SMB/CIFS can operate over IPv6 NOTE: Active Directory is more than the sum of the individual protocols

History of Windows and IPv6 Fully Integrated IPv6 Functionality Fully Integrated IPv6 Stack and Services Windows Server 2008 Windows Vista Windows 7 Microsoft Research Stack IPv6 CIFS Works! Technology Preview Developer Preview & Components Production Stack & Components Advanced Networking Pack + Firewall Teredo Peer to Peer SP1 Production Stack & Components SP1 Production Stack + Firewall Teredo and Peer to Peer SP2 Production Stack + Firewall Teredo and Peer to Peer Windows 2003 Windows XP Windows 2000 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010

Windows Networking & IPv6 IPv4 IPv6 NBT/NetBIOS Yes No WINS Yes No NT Domains Yes No SMB/CIFS Windows XP Yes Yes File Sharing Windows 2003 Yes Yes Active Directory Windows Vista Yes Yes Including file sharing and everything Windows 7 Yes Yes Windows Server 2008 Yes Yes

History of Samba and IPv6 Windows with Production IPv6 Stack & Components Vista and Windows Server 2008 support for CIFS and AD over IPv6 Early versions: IPv6 name resolution possible with Erion Patch IPv6 support possible with Erion Patch CIFS Linux Client IPv6 Support Works Samba 4 No IPv6 support (IPv6 support will Not be added) IPv6 Patch Not Recommended Samba 3.2 IPv6 Support Added Samba 3 (pre 3.2) Samba 2.2 (historic version) 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009

IPv6 PROGRAMMING

History of IPv6 Socket API API Changes RFC 2292 Advanced Sockets API for IPv6 RFC 3542 Advanced Sockets API for IPv6 Networking Services (XNS) 5.2 The Open Group IEEE Std. 1003.1-2001 ISO/IEC 9945:2002 Definitive Standards Work started on API in IPng Working Group RFC 2133 Basic Socket Extensions For IPv6 RFC 2553 Basic Socket Extensions For IPv6 RFC 3493 Basic Socket Extensions For IPv6 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 200

Socket API IPv4 vs IPv6 (1) IPv4 Socket API IPv6 Socket API Protocol Independent Name Resolution No Yes Protocol Independent Address Structure No Yes Supports IPv4 & IPv6 Protocols No Yes Supports IPv4 & IPv6 Applications No Yes Source & binary compatibility for IPv4 Apps Yes it is IPv4! Yes Protocol Independent Interface Identification No Yes Thread safe Depends Yes

Socket API IPv4 vs IPv6 (2) Protocol Family PF_INET IPv4 only Dual IPv6 & IPv4 PF_INET6 Address Family AF_INET AF_INET6 Socket Address Structure sockaddr_in sockaddr_in6 Generic Address Structure sockaddr_storage IP Address Structure in_addr in_addr6 Resolve Name to Address gethostbyname getaddrinfo Resolve Address to Name gethostbyaddr getnameinfo Text to Binary Conversion inet_aton inet_pton Binary to Text Conversion inet_ntoa inet_ntop

Dual Stack and IPv6 API New socket API explicitly dual stack only New API supports both IPv6 and IPv4 IPv6 applications can also be IPv4 applications IPv6 Application (supports IPv4) IPv4 Application IPv6 Socket API IPv4 Socket API Transport (TCP/UDP) IPv4 API is subset of IPv6 socket library IPv6 Stack IPv4 Stack IPv6 Host IPv6 DataLink IPv4 IPv4 Host

Creating a Socket Creating an IPv4 socket socket(pf_inet, SOCK_STREAM, 0); /* TCP socket */ socket(pf_inet, SOCK_DGRAM, 0); /* UDP socket */ Creating an IPv6 (or IPv4) socket socket(pf_inet6, SOCK_STREAM, 0); /* TCP socket */ socket(pf_inet6, SOCK_DGRAM, 0); /* UDP socket */

Passing Addresses to API IPv4 Code struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); /* Put an IPv4 address in addr structure */ bind(sockfd,(struct sockaddr *)&addr, addrlen); IPv6 Code struct sockaddr_in6 addr; socklen_t addrlen = sizeof(addr); /* Put an IPv6 address in addr structure */ bind(sockfd,(struct sockaddr *)&addr, addrlen); Portable Code struct sockaddr_storage addr; socklen_t addrlen = sizeof(addr); /* Put an IPv4 or IPv6 address in addr structure and set addrlen */ bind(sockfd,(struct sockaddr *)&addr, addrlen); IPv6 & IPv4 IPv6 & IPv4

Passing Addresses to Application IPv4 Code struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); accept(sockfd,(struct sockaddr *)&addr, &addrlen); IPv6 Code struct sockaddr_in6 addr; socklen_t addrlen = sizeof(addr); IPv6 & IPv4 accept(sockfd,(struct sockaddr *)&addr, &addrlen); Portable Code struct sockaddr_storage addr; socklen_t addrlen = sizeof(addr); IPv6 & IPv4 accept(sockfd,(struct sockaddr *)&addr, &addrlen);

Dual Stack and IPv6 API (1) sockaddr_in6 or sockaddr_storage sockaddr_in6 or sockaddr_storage IPv6 Socket SRC = 3000::1 DST = 3000::2 IPv6 Application IPv6 Socket SRC = ::FFFF:192.168.1.2 DST = ::FFFF:192.168.1.3 IPv6 Socket API IPv4-mapped IPv6 addresses IPv6 Host 3000::2 IPv6 Socket SRC = 3000::2 DST = 3000::1 Transport (TCP/UDP) IPv6 Stack 3000::1 DataLink ::FFFF:192.168.1.2 IPv4 Stack 192.168.1.2 IPv4 IPv4 Host 192.168.1.3 IPv4 Socket SRC = 192.168.1.3 DST = 192.168.1.2

Dual Stack and IPv6 API (2) sockaddr_in6 or sockaddr_storage sockaddr_in or sockaddr_storage IPv6 Socket SRC = 3000::1 DST = 3000::2 IPv6 Application IPv6 Socket API IPv4 Socket SRC = 192.168.1.2 DST = 192.168.1.3 IPv6 Host 3000::2 IPv6 Socket SRC = 3000::2 DST = 3000::1 Transport (TCP/UDP) IPv6 Stack 3000::1 DataLink ::FFFF:192.168.1.2 IPv4 Stack 192.168.1.2 IPv4 IPv4 Host 192.168.1.3 IPv4 Socket SRC = 192.168.1.3 DST = 192.168.1.2

Address Conversion Conversion from binary representation to textual and vice versa IPv4 Code To Binary int inet_aton (const char *cp, struct in_addr *inp); in_addr_t inet_addr( const char *cp); To Text char *inet_ntoa(struct in_addr in); IPv6 Code To Binary To Text int inet_pton(int family, const char *src, void *dst); const char *inet_ntop(int family, const void *src, char *dst, size_t cnt); These functions are not protocol independent and should be avoided if possible! Use getaddrinfo() and getnameinfo()

Textual Address Formats (1) Global and Link Local addresses Prefix obscured for slide Global Addresses Link local Addresses IPv6 Address (hex separated by colons) Interface ID (Number or name) IPv6 interfaces have unique interface ID and name Note: Windows Server 2008 dialog box is not wide enough for IPv6 addresses! # smbclient -L //fe80::9416:bd6b:8d9c:7490%eth0 -U Administrator IPv4-mapped IPv6 addresses ::ffff:192.168.1.1

Textual Address Formats (2) URLs, URIs and UNCs Use IPv6 in square brackets in URIs and URLs [3000:0:20:0:3de2:17ca:d07d:5f10] Not in UNCs (use ipv6-literal.net. names instead) 3000-0-20-0-3de2-17ca-d07d-5f10.ipv6-literal.net.

Name Resolution API has evolved over time Use getaddrinfo() and getnameinfo() Protocol independent Thread safe (some other functions are not) Don t use getipnodebyname() or getipnodebyaddr() DNS Resolver NIS LDAP etc

Windows IPv6 Name Resolution Options NetBIOS name resolution WINS Hosts file Link-local Multicast Name Resolution (LLMNR) DNS Literal Addresses IPv4 Only IPv4 Only IPv4 and IPv6 IPv4 and IPv6 Note: Windows Only IPv4 and IPv6 IPv4 and IPv6 Linux/Unix NSS module

Literal Addresses In UNCs can use ipv6-literal.net. names 2045-5249-4f4e--1.ipv6-literal.net Literal DNS name converts to IPv6 addresses Hyphens replace colons in domain name s indicates interface (replaces %) NSS module nss-ipv6literal provides this on Linux/Unix

Link-local Multicast Name Resolution (LLMNR) Performs name resolution without DNS DNS over multicast (not mdns) Works for IPv4 and IPv6 hosts Uses multicast addresses IPv6 FF02::1:3 IPv4 224.0.0.252

getaddrinfo() Returns linked list of addrinfo structures Allocates memory, free with freeaddrinfo() getaddrinfo() AF_INET6 3000::1 ai_next AF_INET6 2222::1 ai_next AF_INET 192.168.1.1 ai_next AF_INET 192.168.1.2 ai_next freeaddrinfo() struct addrinfo { int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ int ai_family; /* AF_UNSPEC, AF_INET, AF_INET6 */ int ai_socktype; /* SOCK_STREAM, SOCK_DGRAM... */ int ai_protocol; /* IPPROTO_IP, IPPROTO_IPV6 */ size_t ai_addrlen; /* length of ai_addr */ struct *sockaddr ai_addr; /* socket address structure */ char *ai_canonname; /* cannonical name */ struct *addrinfo ai_next; /* next addrinfo structure */ };

getnameinfo() Converts address and service into strings IPv6 and IPv4 Argument is socket address structure error = getnameinfo((struct sockaddr *)&clientaddr, addrlen, clienthost, sizeof(clienthost), clientservice, sizeof(clientservice), NI_NUMERICHOST); /* handle error here! */ printf("received request from host=[%s] port=[%s]\n", clienthost, clientservice);

Coding Choices with IPv6 API In IPv4 there is one way to write socket applications IPv6 has multiple ways to write same applications Large number of options which do you use? Examples: You can write application with only IPv6 sockets and addresses and it will usually also support IPv4! You can use sockaddr_in, sockaddr_in6 or protocol independent sockaddr_storage for IPv4 sockets! You can use IPv4 addresses or IPv6 addresses to specify IPv4 end-points! (192.168.1.10 or ::ffff:192.168.1.10)

Learn New IPv6 Features (1) IPv6 Interfaces Standard method of enumerating interfaces Sometimes you must specify interface IPv6 Wildcard Addresses two forms in6addr_any Used in assignments IN6ADDR_ANY_INIT Only used at declaration Loopback Address two forms in6addr_loopback Used in assignments IN6ADDR_LOOPBACK_INIT Only used at declaration

Learn New IPv6 Features (2) New socket options Multicast Special sockets (IPV6_V6ONLY) Error handling New address testing macros New constants

IPv6 Code Migration 1. Learn IPv6 2. Modify data structures 3. Change function calls 4. Remove hardcoded addresses 5. Modify the user interface 6. Change some higher-layer protocols 7. Manage dual stack sockets

IPv6 Porting Tools Many tools for porting applications to IPv6: Microsoft checkv4.exe Sun IPv6 Socket Scrubber HP IPv6 porting assistant Open Source PortToIPv6 Some can automatically change source code Not necessarily a good idea! Don t always give the correct advice!

Example Samba4 & PortToIPv6 Reported changes needed in 112 source files 1034 lines Will be many more! Notes Some false positives Some false negatives Many changes to addresses in strings not picked up Relatively straightforward changes Socket Wrapper

EXAMPLE SAMBA AND IPV6

Samba 3.x and IPv6 IPv6 enabled by default Samba 3.2 onwards IPv6 transport works! Client and server side functionality over IPv6 Join Windows Server 2008 AD domains over IPv6 Serve shares and printers over IPv6 (see: http://www.ipv6consultancy.com/ipv6blog/?p=25)

Linux CIFS and IPv6 Kernel CIFS module is IPv6 enabled by default Since SambaXP 2007 mount.cifs Steve French (IBM) and David Holder (Erion) The first ever CIFS client connection over IPv6 # mount -t cifs //W2008KENT/TESTSHARE /mnt/erion \ user=administrator,pass='pa$$w0rd'

Samba 4 and IPv6 IPv6 not enabled by default IPv6 provisioning works with IPv6 address option Samba3 & 4 merge will bring IPv6 support IPv6 can be enabled with Erion patch See http://www.ipv6consultancy.com/ipv6blog With patch IPv6 transport works! IPv6 client and server side functionality IPv6 domain controller functionality Join Samba4 domains over IPv6

IPv6 Addresses Quick Test 2045:5249:4f4e:2054:5241:494e:494e:4720 ::ffff:50.10.1.10 fe80::1%1 ff02::2%eth0 2001:0000:0102:0304::efff:f6ff:fffe 2002:0800:0001::1 3ffe:0302:0011:0020:0000:5EFE:0102:0304 fe80::5efe:0102:0304 You need to know what these are!

Key Lessons Training on IPv6 is very important IPv6 does not equal a new version of IPv4 IPv6 & IPv4 addresses are very different Myriad options for migrating code to IPv6 IPv6 has new features you need to understand IPv4 compatibility will complicate things Even so migrating code is designed to be easy!

IPv6 and Samba References SambaXP 2008 Presentation http://www.ipv6consultancy.com/ipv6blog/?p=34 Google IPv6 Conference 2008 (YouTube) http://youtube.com/watch?v=ik0nzdtzjvm Google CIFS Workshop Presentation http://www.ipv6consultancy.com/ipv6blog/?p=21 SambaXP 2007 Presentation http://www.sambaxp.org/files/sambaxp2007-pdf/holder- SambaVistawithIPv6V2.pdf http://www.ipv6consultancy.com/ipv6blog/?p=8 Linux CIFS Client http://www.ipv6consultancy.com/ipv6blog/?p=9 Samba4 Hack (old version) http://www.ipv6consultancy.com/ipv6blog/?p=12

Erion and IPv6 References IPv6 Services http://www.erion.co.uk/ipv6.html IPv6 Blog http://www.ipv6consultancy.com/ipv6blog IPv6 Training http://www.ipv6training.com IPv6 Consultancy http://www.ipv6consultancy.com Contact david.holder@erion.co.uk

Questions Thank you for listening