A. On R4, create a policy to change the BGP next hop to itself and apply it to IBGP as an export policy
B. Add the external interface prefix to the IGP routing tables
C. Add the internal interface prefix to the BGP routing tables.
D. On R4, create a policy to change the BGP next hop to 172.16.1.1 and apply it to IBGP as an export policy
Explanation:
the default behavior for iBGP is to propagate EBGP-learned prefixes without changing the next-hop. This can cause issues if the next-hop is not reachable via the IGP. One solution is to use the next-hop self command on R4, which will change the next-hop attribute to its own loopback address. This way, R5 can reach the next-hop via the IGP and install the route in its routing table.
Another solution is to add the external interface prefix (120.0.4.16/30) to the IGP routing tables of R4 and R5. This will also make the next-hop reachable via the IGP and allow R5 to use the route. According to 2, this is a possible workaround for a pure IP network, but it may not work well for an MPLS network.