+ All Categories
Home > Documents > Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Date post: 11-Jan-2016
Category:
Upload: matthew-cunningham
View: 213 times
Download: 0 times
Share this document with a friend
20
Lab 5: NAT CS144 Review Session 7 November 13 th , 2009 Roger Liao
Transcript
Page 1: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Lab 5: NAT

CS144 Review Session 7

November 13th, 2009

Roger Liao

Page 2: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Announcements

• Lab 5 is out– Due Thursday, December 3rd

• Layered on top of Lab 3 (sr)– Pass a command flag (-nat) to turn on NAT

behavior

• Lab 3 grade = max(lab 3 grade, lab 5 grade)

Page 3: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Overview

• Basic NAT functionality

• ICMP Requirements

• TCP Requirements

• General NAT processing logic

• Suggestions

Page 4: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

NAT

• Network Address Translation

• Translates private IP addresses to facilitate Internet communication– 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16

• Single device with single IP address– Hides details of internal network– But interferes with many applications

Page 5: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

“Reverse” NAT

• myth (you) is behind NAT

• Distinguish internal (eth0) and external (eth1) by interface name

• Translate packets from myth (VNS firewall) so that it appears the NAT sent them

Page 6: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

mythICMP echo

src IP: 171.64.15.11

dst IP: 171.67.236.21

NAT

App Server App Server

171.67.236.21 171.67.236.23

eth1: 171.67.236.20

eth0: 171.67.236.16 ICMP echo

src IP: 171.67.236.20

dst IP: 171.67.236.21

ICMP echo

src IP: 171.67.236.20

dst IP: 171.67.236.21

Page 7: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

myth

NAT

App Server App Server

171.67.236.21 171.67.236.23

eth1: 171.67.236.20

eth0: 171.67.236.16

ICMP echo reply

src IP: 171.67.236.21

dst IP: 171.67.236.20

ICMP echo reply

src IP: 171.67.236.21

dst IP: 171.64.15.11

ICMP echo reply

src IP: 171.67.236.21

dst IP: 171.64.15.11

Page 8: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

ICMP Requirements

• Support echo requests/replies

• Echo requests are external host independent– Using the same query identifier to two different hosts

will preserve mapping– If A sends an ICMP request with id q1q1’ to B and

another request with id q1q2’ to C, then q1’==q2’.

• Do not timeout ICMP query mappings for at least 60 seconds

Page 9: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

TCP Requirements

1. Endpoint-Independent Mapping behavior for TCP– Same translation (X1:x1)(X1’:x1’) for packets

destined to any external host– UNSAF: Unilateral Self-Address Fixing mechanism

2. Support all valid sequences of TCP packets- TCP implementations should work

3. Endpoint-Independent Filtering behavior for TCP- Like Endpoint-Independent Mapping, just for accepting inbound packets from external hosts

Page 10: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

TCP Requirements

4. Don’t respond to inbound SYN for at least 6 seconds. Drop if outbound SYN received, send Port Unreachable otherwise- Used for supporting simultaneous open- Compromise to have this support and signal error for invalid SYN

5. Abandon idle TCP connections after 2 hours 4 minutes- Rationale: Default keep-alive of 2 hours and transitory period (open/close) of 4 minutes- Can drop or send RST packets for non-SYN pkts with no mapping

Page 11: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

TCP Requirements

6. No port assignment behavior of port overloading for TCP- Disallow different internal endpoints from using the same mapping- This means for (X1:x1)(X1’:x1’) and (X2:x2)(X2’:x2’), (X1’:x1’) != (X2’:x2’)

7. Support hairpinning for TCP of type “External source IP address and port”- Rewrite source IP and port when receiving packet from internal host with a mapping

Page 12: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Hairpinning

NAT

myth myth

X:x Y:y

eth1: 171.67.236.20

eth0: 171.67.236.16

src IP, port - X:x

dst IP, port – Y’:y’

Mapping

Y:yY’:y’

X:xX’:x’

src IP, port – X’:x’

dst IP, port – Y:y

Page 13: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

General Logic

• Check whether packet is inbound or outbound

• Determine if it is ICMP or TCP

• If outbound, add a globally unique mapping

• If inbound, check for existing mapping. – If none, discard (unless TCP SYN or

hairpinning)

Page 14: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

General Logic

• Rewrite IP src/dst– Don’t forget to recompute checksum

• Rewrite ICMP identifier/TCP port– Recompute checksum again– TCP checksum covers pseudoheader and

payload

• Reuse router logic to determine how to forward packet

• Don’t worry about UDP

Page 15: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Threads

• Spawn a thread to handle timing out NAT entries– Similar to ARP cache

• Synchronize access to shared data– NAT mappings– Locks

• Create thread in sr_router.c– Takes a pointer to a C routine. This is where you implement

timeout logic.

• Can rely on main program exit to terminate thread

Page 16: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Data Structures

• Need to store NAT mappings– Linked list is fine, O(n) traversal– Keep a time field to remember when a

mapping was last used

• Need to remember used ICMP identifiers and used port numbers– Separate structures for identifier and port

number

Page 17: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Implementation Suggestions

• Implement NAT code in separate files (e.g. sr_nat.h, sr_nat.c)– Don’t forget to update the Makefile

• Handle command line flags in sr_main.c– http://

www.gnu.org/software/hello/manual/libc/Getopt.html#Getopt

• Create necessary NAT data structures in sr_instance (sr_router.h)– Initialize in sr_router.c

Page 18: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Other Suggestions

• Work on ICMP first and then TCP– Note that ARP is unchanged

• Save logfile (-l logfile to ./sr) and examine packet flow in Wireshark/tcpdump

• Start early – report VNS issues to staff list and VNS admin ([email protected])

Page 19: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Upcoming Updates

• Reference binary for comparison– Will be released next week, accessible from

/usr/class/cs144/bin

• New topology for testing– Most likely will be nested NATs

• Web server will likely be updated to show observed IP address/port on home page

Page 20: Lab 5: NAT CS144 Review Session 7 November 13 th, 2009 Roger Liao.

Questions?


Recommended