PF Playstation4 says FreeBSD router does not support packet fragmentation

My ISP does not supply me with a public IPv4, since he uses a carrier grade nat. This is unfortunate because I can't establish p2p connections with my Playstation4 to other customers of this ISP (which is quite common in my area). Therefore I use a service that provides me with an OpenVPN endpoint with my own public IP. That means I have the public IP on my tap interface on my FreeBSD homeserver, which I use first and foremost as NAS and torrent machine.

The FreeBSD server is not my router. My router is a provider supplied plastic box which just works.

Now to my problem: Whenever I forward my Playstation4 traffic via my FreeBSD server regardless whether I just forward to my plastic box or NAT to the tap interface I always get the message on my Playstation4 (when doing the "test internet connection") that my router does not support packet fragmentation. When just setting my plastic box as router there is no such warning.

Despite the fact that the p2p to other customers seems to work I am anxious that there is something wrong that will maybe show up later in a specific game for example. The Playstation4 is quite quirky. It requires to do the port forwarding via UPNP otherwise it won't connect to other customers even though I have manually forwarded all traffic to the PS4. So I believe it would be best to get rid of all the warnings, because it is obvious that the PS4 somehow relies on the result of that "internet test".

Remember that the fragmentation warning does not show up when I set my plastic box as router in the PS4. So the ISP is not discarding the fragments.

First thing I did was deactivating scrub. This didn't do the trick. Maybe there is something else that FreeBSD does to prevent the fragmentation. I will post my whole pf.conf and ifconfig output. Maybe there is some other error. The other tunnel interface (tun88) is just for torrenting (using airvpn). There is some web interface where I can forward some ports which I use to connect some services on the FreeBSD server. It won't suffice for the PS4 because you need to forward specific ports and with airvpn you share one public IP with a lot of other users of course.

if_lan is my actual lan. if_lan2 ist just a backup interface where no cable is plugged in. I replaced any public IP's by a _PLACEHOLDER_. To be clear: The playstation is attached to bridge0 and I route the traffic via NAT to my public IP at tap12.

Code:
if_airvpn = "tun88"
if_public = "tap12"
if_lan = "bridge0"
if_lan2 = "re0"
if_loopback = "lo0"
ip_ps4 = "192.168.1.3"

# ps4 does not like scrub
no scrub on $if_lan 
no scrub on $if_public

# scrub
scrub on $if_lan2 
scrub on $if_airvpn

# create a nat on the public ip
nat on $if_public from ($if_lan:network) to any -> ($if_public) static-port

# port forwards by upnp
rdr-anchor miniupnpd

# general policy is to block everything
block log

# pass in rules on $if_public for the port forwards
anchor miniupnpd

# do not block lan and loopback
pass quick on $if_loopback       
pass quick on $if_lan
pass quick on $if_lan2

# allow icmp everywhere except for deluge (we restrict any bittorent communication to airvpn tunnel)
pass quick proto icmp user != deluge

# allow outgoing IPv4 traffic on tunnel interfaces
pass out on $if_public inet
pass out on $if_airvpn inet

# redirect ps4 traffic to public ip (airvpn is the default route)
pass in log on $if_lan route-to ( $if_public _PUBLICGW_ ) from $ip_ps4 to !($if_lan:network)

# allow incoming traffic for selected services on $if_airvpn (ipv4)
pass in on $if_airvpn inet proto tcp to port 32400                # plex
pass in on $if_airvpn inet proto tcp to port 14100                    # ssh
pass in on $if_airvpn inet proto tcp to port 14101                # https

# restrictive bittorent setting
block user deluge                                                   # policy for deluge: no network access
pass out on $if_airvpn inet                                           # deluge is only allowed to access the airvpn tunnel (over IPv4)
pass in on $if_airvpn inet proto {tcp,udp} to port 7016            # deluge needs to receive incoming connections

# -----------------------------------------

Code:
igb0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500

    options=403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO>

    ether 90:e2:ba:0e:d2:00

    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

    media: Ethernet autoselect (10baseT/UTP <half-duplex>)

    status: active

igb1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500

    options=403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO>

    ether 90:e2:ba:0e:d2:01

    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

    media: Ethernet autoselect (1000baseT <full-duplex>)

    status: active

igb2: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500

    options=403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO>

    ether 90:e2:ba:0e:d2:02

    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

    media: Ethernet autoselect

    status: no carrier

igb3: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500

    options=403bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,VLAN_HWTSO>

    ether 90:e2:ba:0e:d2:03

    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

    media: Ethernet autoselect (1000baseT <full-duplex>)

    status: active

re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

    options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>

    ether a4:1f:72:96:56:73

    inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255

    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

    media: Ethernet autoselect (none)

    status: no carrier

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384

    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>

    inet6 ::1 prefixlen 128

    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6

    inet 127.0.0.1 netmask 0xff000000

    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

    ether 02:de:88:22:4e:00

    inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255

    inet6 fe80::de:88ff:fe22:4e00%bridge0 prefixlen 64 scopeid 0x7

    inet6 _PUBLIC_IP_ prefixlen 64 autoconf

    nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

    id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15

    maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200

    root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0

    member: igb3 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>

            ifmaxaddr 0 port 4 priority 128 path cost 2000000

    member: igb2 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>

            ifmaxaddr 0 port 3 priority 128 path cost 2000000

    member: igb1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>

            ifmaxaddr 0 port 2 priority 128 path cost 2000000

    member: igb0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>

            ifmaxaddr 0 port 1 priority 128 path cost 2000000

tap12: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1454

    options=80000<LINKSTATE>

    ether 00:bd:b4:52:00:0c

    inet6 fe80::2bd:b4ff:fe52:c%tap12 prefixlen 64 scopeid 0x8

    inet _PUBLIC_IP_ netmask 0xfffffe00 broadcast _PUBLIC_IP_

    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

    media: Ethernet autoselect

    status: active

    Opened by PID 868

tun88: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500

    options=80000<LINKSTATE>

    inet6 fe80::92e2:baff:fe0e:d200%tun88 prefixlen 64 scopeid 0x9

    inet 10.4.0.13 --> 10.4.0.1 netmask 0xffff0000

    nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

    Opened by PID 875

pflog0: flags=0<> metric 0 mtu 33160
 
Last edited by a moderator:
Code:
scrub from PS3-ip-address to any no-df random-id fragment reassemble
scrub on $ext_if all

Works fine on my PS3 at least.
//Danne
 
Back
Top