assignment 2 (part i) - github pages · goal & environment 1. direct all outbound traffic of vm...

21
CSCI 4430 Tutorial Project 2 (Part I) Mi Zhang [email protected] 23/03/2017 1 (Acknowledgement: Helen Chan)

Upload: others

Post on 28-May-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

CSCI 4430 TutorialProject 2 (Part I)

Mi Zhang

m z h a n g @ c s e . c u h k . e d u . h k

23/03/2017 1

(Acknowledgement: Helen Chan)

Page 2: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Outline• Project Overview

▫ Goal

▫ Environment

▫ Main Ideas

• Prepare the VMs▫ Access to VMs

▫ Setup NFQUEUE on VM A

• Header Checksum

23/03/2017 2

Page 3: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Outline• Project Overview

▫ Goal

▫ Environment

▫ Main Ideas

• Prepare the VMs▫ Access to VMs

▫ Setup NFQUEUE on VM A

• Header Checksum

23/03/2017 3

Page 4: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Goal & Environment• Goal:

Build an NAT program in C/C++ to forward TCPtraffic

▫ NAT: lecture notes “Network Layer -IP”, pp.60-68▫ TCP: lecture notes, “Transport Layer - TCP”

• Environment:▫ VM A: 2 network interfaces

▪ eth0: Virtual, internal network

▪ eth1: Department network

▫ VM B, VM C: 1 network interface▪ eth0: Virtual, internal network only

23/03/2017 4

Page 5: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Goal & Environment

23/03/2017 5

Page 6: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Goal & Environment1. Direct all outbound traffic of VM B and VM C to

VM A▫ Refer to the specification for setting the default gateway on VM B

and VM C - `sudo route add default gw Ain`▫ Part of the setup before NAT program is run/tested, NOT to handle

it in your program

2. Trap packets for your NAT program onVM A

▫ Refer to Table 1 in the specification - run_iptables.sh▫ Part of the setup before NAT program is run/tested, NOT to handle

it in your program

3. Run your NAT program on VM A

23/03/2017 6

Page 7: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Main Ideas• Program input :

$ ./nat <public ip> <internal ip> <subnet mask>

▪ Public IP: 10.3.1.[vm group id]

▪ Internal IP: 10.0.[vm group id].[0-255]

▪ Subnet mask: 24

• What to do:1. Monitor packets on the NFQUEUE2. Identify packets matching the criteria, e.g. protocol, inbound vs.

outbounda. Lookup or create NAT entries if necessary

3. Modify the packets if necessarya. Recalculate checksum

4. Decide whether to accept or reject packets

23/03/2017 7

Page 8: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Assignment Overview• NFQUEUE (libnetfilter-queue)

▫ Online Documentation:▪ http://www.netfilter.org/projects/libnetfilter_queue/doxygen/ind

ex.html

▫ Installation on Ubuntu▪ sudo apt-get install libnetfilter-queue-dev

23/03/2017 8

Page 9: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Outline• Assignment Overview

▫ Goal

▫ Environment

▫ Main Ideas

• Prepare the VMs▫ Access to VMs

▫ Setup NFQUEUE on VM A

• Header Checksum

23/03/2017 9

Page 10: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Access to VMs• Email on VMs assignment

▫ Contains VM Group ID, and other information▫ Note that “Group No.” is not necessary the same as “VM Group ID”

• Accessible within CSE network

• Power up the VMs via vSphere Client

• Set up your own password▫ Or you risk your homework being accessible by others

• IPs of VMs▫ eth0: 10.0.[vm group id].(1|2|3)

▪ 1 for VM A, 2 for VM B, 3 for VM C

▫ eth1: 10.3.1.[vm group id]▪ Only available on VM A

23/03/2017 10

Page 11: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Access to VMs• Access via vSphere Client

• Access via SSH▫ VM A: within the CSE network,

$ ssh –p[13000 + vm group id] [email protected]

▫ VM B, VM C : on VM A,

$ ssh [email protected].[vm group id].(2|3)

23/03/2017 11

Page 12: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Setup NFQUEUE on VM A• Install NFQUEUE (for development)

$ sudo apt-get install libnetfilter-queue-dev

• Compile the example program provided in lecture

▫ Download nfq.zip from the course webpage▫ Add rules to trap packets, e.g.

$ sudo iptables -A OUTPUT -p icmp -j NFQUEUE --queue-num 0

▫ Run the program: $ sudo ./nftest

▫ Generate some packets, e.g.$ ping -c 3 10.0.[vm group id].2

23/03/2017 12

Same as the queue no. supplied to

nfq_create_queue().

Page 13: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Outline• Assignment Overview

▫ Goal

▫ Environment

▫ Main Ideas

• Prepare the VMs▫ Access to VMs

▫ Setup NFQUEUE on VM A

• Header Checksum

23/03/2017 13

Page 14: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Header Checksum• Recalculate the checksum of a packet

whenever the packet is modified▫ Packets with incorrect checksum will be dropped

• How to calculate checksum?▫ Refer to the lecture notes “Transport Layer - Introduction,

UDP, Checksum”

• We provide the implementation to generate checksums for IP and TCP headers:

▫ "checksum.h" and "checksum.c"▫ You may use them directly in the assignment

23/03/2017 14

Page 15: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Today’s Tutorial• Assignment Overview

▫ Goal

▫ Environment

▫ Main Ideas

• Prepare the VMs▫ Access to VMs

▫ Setup NFQUEUE on VM A

• Header Checksum

23/03/2017 15

Page 16: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Next week’s tutorial …• More details on packet processing (using

NFQUEUE)

• Some recommended materials to go through before next week’s tutorial

▫ Example program on NFQUEUE in class

▫ Lecture notes on routing and NAT

▫ Assignment Specification

23/03/2017 16

Next week tutorial: Project 2 (Part II)

Page 17: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Extra

23/03/2017 17

Page 18: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

VM Hostname• Same hostname for VM A, VM B and VM C …

▫ Prompt: csci4430@csci4430-0:~$

• Change hostname:▫ On VM A, assume the new hostname is “vm-a”:

$ echo "vm-a" | sudo tee /etc/hostname

▪ Edit "/etc/hosts", replace "csci4430-0" with "vm-a" :

127.0.0.1 localhost

127.0.1.1 vm-a

▪ Re-login to VM

▫ Similar on VM B and VM C

23/03/2017 18

(Acknowledgement: Qin Liu)

Page 19: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

VM Hostname• Entering IP every time when log onto VM B

and VM C …

• Associate IPs to hostnames▫ Append the entry to "/etc/hosts",

10.0.[vm group id].1 vm-a

10.0.[vm group id].2 vm-b

10.0.[vm group id].3 vm-c

▫ May do it on VM B and VM C as well▫ Access VMs by hostname,

▪ On VM A, $ ssh vm-b

23/03/2017 19

(Acknowledgement: Qin Liu)

Page 20: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Useful Commands• ifconfig

▫ Display information of network interfaces▪ For all the network interfaces (by default) $ ifconfig -a

▪ For a specific interface "eth0", $ ifconfig eth0

• nslookup▫ Query IP addresses by domain names

▪ e.g. find the IP address of workstation linux1 on VM A or other workstations, $ nslookup linux1

Name: linux1.cse.cuhk.edu.hkAddress: 137.189.88.145

23/03/2017 20

Page 21: Assignment 2 (Part I) - GitHub Pages · Goal & Environment 1. Direct all outbound traffic of VM Band VM Cto VM A Refer to the specification for setting the default gateway on VM B

Useful Commands• iptables

▫ User-level tool for maintaining packet filter rules in kernel

▪ Display rules in a table "table", $ sudo iptables –t [table] –nL

▪ Drop all the rules in a table "table", $ sudo iptables –t [table] –F

• nc▫ Netcat: a simple utility for establishing and listening TCP

or UDP connections, see man page for details▪ Note: this command is not available on sparc1-sparc20

23/03/2017 21