Hi Folks, I am writing to seek assistance regarding an issue I am experiencing in trying to route my Personal Computer's network traffic to a TUN interface. My objective is to modify some of its content and subsequently return the traffic back.
So far, I have successfully created a TUN interface using the following configuration: andersen@pc% ifconfig tun8 inet 172.16.122.1/32 172.16.122.2 up andersen@pc% ifconfig tun8 tun8: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 172.16.122.1 --> 172.16.122.2 netmask 0xffffffff Subsequently, I have also inspected the primary Ethernet interface, em0, as follows: andersen@pc % ifconfig em0 em0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500 options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM> ether xx:xx:xx:xx:xx:xx inet 192.168.1.128 netmask 0xffffff00 broadcast 192.168.1.255 nd6 options=201<PERFORMNUD,DAD> media: autoselect status: active And I've updated pf.conf; set skip on { lo0 tun8 } ext_if="em0" tun_if="tun8" # allow dns pass in log quick on $ext_if inet proto { tcp udp } from any to any port 53 pass out log quick on $ext_if inet proto { tcp udp } from any to any port 53 pass in log quick on $ext_if pass out log quick on $ext_if route-to (tun8 (tun8)) no state pass out log quick on $tun_if reply-to (em0 (em0)) -- I implemented a small C program that reads packets from /dev/tun8 and writes them back to the same device. During the writing phase, I have attempted to add a 4-byte TUN header (with AF_INET byte). The issue arises when I enable pf, as my connectivity ceases to function. I suspect that the problem may be linked to the reply-to rule. I can accurately read all network packets, but my network connectivity is disrupted when I activate pf. Are there any thoughts about what I'm doing wrong? Thanks! Here is a sample from pflog; andersen@pc% sudo tcpdump -nettti pflog0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on pflog0, link-type PFLOG (OpenBSD pflog file), capture size 246 bytes 00:00:00.000000 rule 6/0(match): pass out on em0: 192.168.1.128.52553 > 17.248.173.70.443: Flags [S], seq 1289016582, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1617830816 ecr 0,sackOK,eol], length 0 00:00:00.005332 rule 6/0(match): pass out on em0: 192.168.1.128.52569 > 17.248.172.107.443: Flags [S], seq 1886843796, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386220006 ecr 0,sackOK,eol], length 0 00:00:00.178005 rule 6/0(match): pass out on em0: 192.168.1.128.52554 > 17.248.172.208.443: Flags [S], seq 3787270145, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1898437799 ecr 0,sackOK,eol], length 0 00:00:00.079092 rule 6/0(match): pass out on em0: 192.168.1.128.52570 > 17.248.173.83.443: Flags [S], seq 606598735, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2940552698 ecr 0,sackOK,eol], length 0 00:00:00.174093 rule 6/0(match): pass out on em0: 192.168.1.128.52555 > 17.248.172.172.443: Flags [S], seq 1449413825, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 212268682 ecr 0,sackOK,eol], length 0 00:00:00.079048 rule 6/0(match): pass out on em0: 192.168.1.128.52571 > 17.248.172.135.443: Flags [S], seq 1322915507, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1857621092 ecr 0,sackOK,eol], length 0 00:00:00.251641 rule 6/0(match): pass out on em0: 192.168.1.128.52572 > 17.248.173.70.443: Flags [S], seq 4000045446, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2056755864 ecr 0,sackOK,eol], length 0 00:00:00.257416 rule 6/0(match): pass out on em0: 192.168.1.128.52573 > 17.248.172.208.443: Flags [S], seq 1732485582, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1481034375 ecr 0,sackOK,eol], length 0 00:00:00.251107 rule 6/0(match): pass out on em0: 192.168.1.128.52574 > 17.248.172.172.443: Flags [S], seq 3829285313, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2878347929 ecr 0,sackOK,eol], length 0 00:00:00.013117 rule 6/0(match): pass out on em0: 192.168.1.128.52558 > 23.53.168.52.443: Flags [S], seq 4080379298, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2646123787 ecr 0,sackOK,eol], length 0 00:00:00.000037 rule 6/0(match): pass out on em0: 192.168.1.128.52557 > 23.53.168.52.443: Flags [S], seq 357265796, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4150893962 ecr 0,sackOK,eol], length 0 00:00:02.208051 rule 6/0(match): pass out on em0: 192.168.1.128.52567 > 17.248.173.13.443: Flags [S], seq 3186783538, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 119993039 ecr 0,sackOK,eol], length 0 00:00:00.077884 rule 4/0(match): pass in on em0: 192.168.1.1 > 224.0.0.1: igmp query v2 00:00:00.175705 rule 6/0(match): pass out on em0: 192.168.1.128.52568 > 17.248.172.177.443: Flags [S], seq 1856508746, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2360328967 ecr 0,sackOK,eol], length 0 00:00:00.255099 rule 6/0(match): pass out on em0: 192.168.1.128.52569 > 17.248.172.107.443: Flags [S], seq 1886843796, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386224007 ecr 0,sackOK,eol], length 0 00:00:00.256351 rule 6/0(match): pass out on em0: 192.168.1.128.52570 > 17.248.173.83.443: Flags [S], seq 606598735, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2940556698 ecr 0,sackOK,eol], length 0 00:00:00.182384 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [SEW], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076314596 ecr 0,sackOK,eol], length 0 00:00:00.072401 rule 6/0(match): pass out on em0: 192.168.1.128.52571 > 17.248.172.135.443: Flags [S], seq 1322915507, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1857625093 ecr 0,sackOK,eol], length 0 00:00:00.250291 rule 6/0(match): pass out on em0: 192.168.1.128.52572 > 17.248.173.70.443: Flags [S], seq 4000045446, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2056759864 ecr 0,sackOK,eol], length 0 00:00:00.259099 rule 6/0(match): pass out on em0: 192.168.1.128.52573 > 17.248.172.208.443: Flags [S], seq 1732485582, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1481038376 ecr 0,sackOK,eol], length 0 00:00:00.067104 rule 6/0(match): pass out on em0: 192.168.1.128.52535 > 17.248.173.50.443: Flags [S], seq 1900937235, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.184108 rule 6/0(match): pass out on em0: 192.168.1.128.52574 > 17.248.172.172.443: Flags [S], seq 3829285313, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2878351930 ecr 0,sackOK,eol], length 0 00:00:00.068105 rule 6/0(match): pass out on em0: 192.168.1.128.52536 > 17.248.172.140.443: Flags [S], seq 949915843, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.099102 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [S], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076315597 ecr 0,sackOK,eol], length 0 00:00:00.156140 rule 6/0(match): pass out on em0: 192.168.1.128.52537 > 17.248.173.47.443: Flags [S], seq 4291447773, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.249211 rule 6/0(match): pass out on em0: 192.168.1.128.52538 > 17.248.172.143.443: Flags [S], seq 3919897475, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.080060 rule 4/0(match): pass in on em0: 192.168.1.113 > 224.0.0.251: igmp v2 report 224.0.0.251 00:00:00.000013 rule 4/8(ip-option): pass in on em0: 192.168.1.113 > 224.0.0.251: igmp v2 report 224.0.0.251 00:00:00.178027 rule 6/0(match): pass out on em0: 192.168.1.128.52539 > 17.248.172.145.443: Flags [S], seq 2733256530, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.260088 rule 6/0(match): pass out on em0: 192.168.1.128.52540 > 17.248.173.72.443: Flags [S], seq 2510868264, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.077581 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [S], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076316598 ecr 0,sackOK,eol], length 0 00:00:00.169834 rule 6/0(match): pass out on em0: 192.168.1.128.52541 > 17.248.173.17.443: Flags [S], seq 4064197090, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.262106 rule 6/0(match): pass out on em0: 192.168.1.128.52542 > 17.248.172.169.443: Flags [S], seq 2004744821, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.569095 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [S], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076317599 ecr 0,sackOK,eol], length 0 00:00:01.001092 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [S], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076318600 ecr 0,sackOK,eol], length 0 00:00:01.001015 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [S], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076319601 ecr 0,sackOK,eol], length 0 00:00:00.210129 rule 6/0(match): pass out on em0: 192.168.1.128 > 224.0.0.251: igmp v2 report 224.0.0.251 00:00:00.000008 rule 6/8(ip-option): pass out on em0: 192.168.1.128 > 224.0.0.251: igmp v2 report 224.0.0.251 00:00:01.789845 rule 6/0(match): pass out on em0: 192.168.1.128.52575 > 52.202.88.98.80: Flags [S], seq 2536687563, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 4076321601 ecr 0,sackOK,eol], length 0 00:00:00.049125 rule 6/0(match): pass out on em0: 192.168.1.128.52567 > 17.248.173.13.443: Flags [S], seq 3186783538, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 120001040 ecr 0,sackOK,eol], length 0 00:00:00.253820 rule 6/0(match): pass out on em0: 192.168.1.128.52568 > 17.248.172.177.443: Flags [S], seq 1856508746, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2360336968 ecr 0,sackOK,eol], length 0 00:00:00.015155 rule 4/0(match): pass in on em0: 192.168.1.113 > 239.255.255.250: igmp v2 report 239.255.255.250 00:00:00.000008 rule 4/8(ip-option): pass in on em0: 192.168.1.113 > 239.255.255.250: igmp v2 report 239.255.255.250 00:00:00.239733 rule 6/0(match): pass out on em0: 192.168.1.128.52569 > 17.248.172.107.443: Flags [S], seq 1886843796, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 386232008 ecr 0,sackOK,eol], length 0 00:00:00.256105 rule 6/0(match): pass out on em0: 192.168.1.128.52570 > 17.248.173.83.443: Flags [S], seq 606598735, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2940564699 ecr 0,sackOK,eol], length 0 00:00:00.254099 rule 6/0(match): pass out on em0: 192.168.1.128.52571 > 17.248.172.135.443: Flags [S], seq 1322915507, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1857633093 ecr 0,sackOK,eol], length 0 00:00:00.250162 rule 6/0(match): pass out on em0: 192.168.1.128.52572 > 17.248.173.70.443: Flags [S], seq 4000045446, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2056767864 ecr 0,sackOK,eol], length 0 00:00:00.260080 rule 6/0(match): pass out on em0: 192.168.1.128.52573 > 17.248.172.208.443: Flags [S], seq 1732485582, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 1481046377 ecr 0,sackOK,eol], length 0 00:00:00.250360 rule 6/0(match): pass out on em0: 192.168.1.128.52574 > 17.248.172.172.443: Flags [S], seq 3829285313, win 65535, options [mss 1460,nop,wscale 6,nop,nop,TS val 2878359931 ecr 0,sackOK,eol], length 0 00:00:00.167165 rule 6/0(match): pass out on em0: 192.168.1.128.52544 > 104.18.17.94.443: Flags [S], seq 2289584627, win 65535, options [mss 1460,sackOK,eol], length 0 00:00:00.255769 rule 6/0(match): pass out on em0: 192.168.1.128.52545 > 104.18.16.94.443: Flags [S], seq 2611325305, win 65535, options [mss 1460,sackOK,eol], length 0