[Bug 270177] "ipfw fwd NEIGHBOUR" goes through default gateway.

From: <bugzilla-noreply_at_freebsd.org>
Date: Mon, 13 Mar 2023 13:59:16 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=270177

--- Comment #1 from rx5670@gmail.com ---
Hello.
I have a box (fbsd3) whith 2 internet connections: inet0 [1.1.1.253]
and inet2 [2.2.2.253].
I installed 13.1-RELEASE and updated it to 13.1-p6.

#####################################################################
When I ping this box's inet2 leg from outside it sends replies
through its inet0 leg.

From my outside test box (deb2) I ping fbsd3's inet2 leg:
root@deb2:~# ping -c 1 2.2.2.253
PING 2.2.2.253 (2.2.2.253) 56(84) bytes of data.
64 bytes from 2.2.2.253: icmp_seq=1 ttl=63 time=0.532 ms

--- 2.2.2.253 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.532/0.532/0.532/0.000 ms
root@deb2:~#

tcpdump on fbsd3's inet2 shows this:
root@fbsd3:~ # tcpdump -np -i inet2
16:07:20.224133 IP 3.3.3.254 > 2.2.2.253: ICMP echo request, id 16107, seq 1,
length 64
root@fbsd3:~ #

at the same time tcpdump on fbsd3's inet0 shows this:
root@fbsd3:~ # tcpdump -np -i inet0
16:07:20.224196 IP 2.2.2.253 > 3.3.3.254: ICMP echo reply, id 16107, seq 1,
length 64
root@fbsd3:~ #

#####################################################################
When initial tcp connection is established some packets not forwarded by "ipfw
fwd".

On fbsd3 I use ncat to listen tcp 12345 port:
root@fbsd3:~ # nc -kl 12345

and from my outside test box (deb2) I ncat fbsd3's inet2 leg:
root@deb2:~# echo | nc 2.2.2.253 12345
root@deb2:~#

tcpdump on fbsd3's inet2 shows this:
root@fbsd3:~ # tcpdump -np -i inet2
16:24:45.215293 IP 3.3.3.254.59908 > 2.2.2.253.12345: Flags [S], seq
3626711860, win 64240, options [mss 1460,sackOK,TS val 3097103294 ecr
0,nop,wscale 7], length 0
16:24:45.215692 IP 3.3.3.254.59908 > 2.2.2.253.12345: Flags [.], ack
3088954691, win 502, options [nop,nop,TS val 3097103295 ecr 39579762], length 0
16:24:45.215759 IP 3.3.3.254.59908 > 2.2.2.253.12345: Flags [P.], seq 0:1, ack
1, win 502, options [nop,nop,TS val 3097103295 ecr 39579762], length 1
16:24:45.215806 IP 3.3.3.254.59908 > 2.2.2.253.12345: Flags [F.], seq 1, ack 1,
win 502, options [nop,nop,TS val 3097103295 ecr 39579762], length 0
16:24:45.215826 IP 2.2.2.253.12345 > 3.3.3.254.59908: Flags [.], ack 2, win
1027, options [nop,nop,TS val 39579762 ecr 3097103295], length 0
16:24:45.215859 IP 2.2.2.253.12345 > 3.3.3.254.59908: Flags [F.], seq 1, ack 2,
win 1027, options [nop,nop,TS val 39579762 ecr 3097103295], length 0
16:24:45.215966 IP 3.3.3.254.59908 > 2.2.2.253.12345: Flags [.], ack 2, win
502, options [nop,nop,TS val 3097103295 ecr 39579762], length 0
root@fbsd3:~ #

at the same time tcpdump on fbsd3's inet0 shows this:
root@fbsd3:~ # tcpdump -np -i inet0
16:24:45.215349 IP 2.2.2.253.12345 > 3.3.3.254.59908: Flags [S.], seq
3088954690, ack 3626711861, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS
val 39579762 ecr 3097103294], length 0
root@fbsd3:~ #

#####################################################################
"Ping" from 13.1-p6 not forwarded by "ipfw fwd".

From fbsd3 I ping my outside test box (deb2) and forwarding through inet2 does
not work:
root@fbsd3:~ #
root@fbsd3:~ # ping -c 1 3.3.3.254
PING 3.3.3.254 (3.3.3.254): 56 data bytes
64 bytes from 3.3.3.254: icmp_seq=0 ttl=63 time=0.393 ms

--- 3.3.3.254 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.393/0.393/0.393/0.000 ms
root@fbsd3:~ #

at the same time tcpdump on fbsd3's inet0 shows this:
root@fbsd3:~ # tcpdump -np -i inet0
16:35:50.005649 IP 1.1.1.253 > 3.3.3.254: ICMP echo request, id 28962, seq 0,
length 64
16:35:50.005965 IP 3.3.3.254 > 1.1.1.253: ICMP echo reply, id 28962, seq 0,
length 64
root@fbsd3:~ #


#####################################################################
My configuration is:

---------------------------------------------------------------------
My outside box (deb2) is Debian linux:

root@deb2:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens161: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
    link/ether 00:50:56:92:eb:0d brd ff:ff:ff:ff:ff:ff
    altname enp4s0
    inet 3.3.3.254/24 brd 3.3.3.255 scope global ens161
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe92:eb0d/64 scope link
       valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
    link/ether 00:50:56:92:d8:81 brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    inet 172.22.22.104/16 brd 172.22.255.255 scope global dynamic ens192
       valid_lft 72827sec preferred_lft 72827sec
    inet6 fe80::250:56ff:fe92:d881/64 scope link
       valid_lft forever preferred_lft forever
root@deb2:~#
root@deb2:~#
root@deb2:~# ip route show
default via 172.22.1.254 dev ens192
1.1.1.0/24 via 3.3.3.3 dev ens161
2.2.2.0/24 via 3.3.3.3 dev ens161
3.3.3.0/24 dev ens161 proto kernel scope link src 3.3.3.254
172.22.0.0/16 dev ens192 proto kernel scope link src 172.22.22.104

---------------------------------------------------------------------
My intermediate box (deb1) is Debian linux:

root@deb1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens161: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
    link/ether 00:50:56:92:dd:1e brd ff:ff:ff:ff:ff:ff
    altname enp4s0
    inet 3.3.3.3/24 brd 3.3.3.255 scope global ens161
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe92:dd1e/64 scope link
       valid_lft forever preferred_lft forever
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
    link/ether 00:50:56:92:72:d5 brd ff:ff:ff:ff:ff:ff
    altname enp11s0
    inet 172.22.22.102/16 brd 172.22.255.255 scope global dynamic ens192
       valid_lft 53323sec preferred_lft 53323sec
    inet6 fe80::250:56ff:fe92:72d5/64 scope link
       valid_lft forever preferred_lft forever
4: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
    link/ether 00:50:56:92:ff:b3 brd ff:ff:ff:ff:ff:ff
    altname enp19s0
    inet 2.2.2.2/24 brd 2.2.2.255 scope global ens224
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe92:ffb3/64 scope link
       valid_lft forever preferred_lft forever
5: ens256: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
group default qlen 1000
    link/ether 00:50:56:92:38:55 brd ff:ff:ff:ff:ff:ff
    altname enp27s0
    inet 1.1.1.1/24 brd 1.1.1.255 scope global ens256
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe92:3855/64 scope link
       valid_lft forever preferred_lft forever
root@deb1:~#
root@deb1:~#
root@deb1:~# ip route sh
default via 172.22.1.254 dev ens192
1.1.1.0/24 dev ens256 proto kernel scope link src 1.1.1.1
2.2.2.0/24 dev ens224 proto kernel scope link src 2.2.2.2
3.3.3.0/24 dev ens161 proto kernel scope link src 3.3.3.3
172.22.0.0/16 dev ens192 proto kernel scope link src 172.22.22.102
root@deb1:~#

---------------------------------------------------------------------
My test freebsd box (fbsd3)

root@fbsd3:~ # uname -a
FreeBSD fbsd3 13.1-RELEASE-p6 FreeBSD 13.1-RELEASE-p6 GENERIC amd64
root@fbsd3:~ #
root@fbsd3:~ #
root@fbsd3:~ # cat /etc/rc.conf
hostname="fbsd3"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
#
zfs_enable="YES"
clear_tmp_enable="YES"
sshd_enable="YES"
#
firewall_enable="YES"
firewall_script="/etc/rc.firewall.local"
#
gateway_enable="YES"
defaultrouter="1.1.1.1"
#
ifconfig_em0_name=lan0
ifconfig_vmx0_name=inet0
ifconfig_vmx1_name=inet2
#
ifconfig_lan0="inet 172.22.1.196 netmask 255.255.0.0"
ifconfig_inet0="inet 1.1.1.253 netmask 255.255.255.0"
ifconfig_inet2="inet 2.2.2.253 netmask 255.255.255.0"
root@fbsd3:~ #
root@fbsd3:~ #
root@fbsd3:~ # ipfw -S list
00050 set 0 skipto 100 ip from any to any in // ## ALL_IN
00060 set 0 skipto 200 ip from any to any out // ## ALL_OUT
00110 set 0 skipto 300 ip from any to any in recv lan0 // ## IN_LAN0
00120 set 0 skipto 400 ip from any to any in recv inet0 // ## IN_INET0
00140 set 0 skipto 500 ip from any to any in recv inet2 // ## IN_INET2
00210 set 0 skipto 600 ip from any to any out xmit lan0 // ## OUT_LAN0
00220 set 0 skipto 700 ip from any to any out xmit inet0 // ## OUT_INET0
00230 set 0 skipto 800 ip from any to any out xmit inet2 // ## OUT_INET2
00310 set 0 allow ip from any to me keep-state :default
00390 set 0 deny ip from any to any
00410 set 0 allow ip from any to me keep-state :default
00490 set 0 deny ip from any to any
00510 set 0 allow ip from any to me keep-state :default
00590 set 0 deny ip from any to any
00610 set 0 allow ip from me to any keep-state :default
00690 set 0 deny ip from any to any
00700 set 0 fwd 2.2.2.2 ip from any to any
00710 set 0 allow ip from me to any keep-state :default
00790 set 0 deny ip from any to any
00810 set 0 allow ip from me to any keep-state :default
00900 set 0 deny ip from any to any
65535 set 31 deny ip from any to any
root@fbsd3:~ #
root@fbsd3:~ #
root@fbsd3:~ # netstat -rn4
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            1.1.1.1            UGS       inet0
1.1.1.0/24         link#2             U         inet0
1.1.1.253          link#2             UHS         lo0
2.2.2.0/24         link#3             U         inet2
2.2.2.253          link#3             UHS         lo0
127.0.0.1          link#4             UH          lo0
172.22.0.0/16      link#1             U           em0
172.22.1.196       link#1             UHS         lo0
root@fbsd3:~ #

-- 
You are receiving this mail because:
You are the assignee for the bug.