As Gordon explained very clearly, if you assume your IR model is normal, you have closed form formulas.
The important thing here is that the Forward with maturity T is lognormal under the $T$-forward measure.
Why is that? Why do we care?
As soon as you have stochastic interest rates, you should basically forget about the risk neutral measure and think in terms of forward measures instead. The change of measure formula is: $$ V_t = \mathbb{E}^{\mathbb{Q}^{RN}}_t[e^{-\int_t^T r_u\,du} V_T] = Z_{t,T}\mathbb{E}^{\mathbb{Q}^T}_t[V_T] $$ where $$ Z_{t,T} = \mathbb{E}^{\mathbb{Q}^{RN}}_t[e^{-\int_t^T r_u\,du} ] $$ is the ZCB price, i.e. the value of receiving 1 unit of currency at time $T$, as seen from time $t$ (I write $\mathbb{E}_t$ for the conditional expectation wrt the filtration representing the information available at time $t$).
The ZCB price is typically known/implied from liquid rates instruments at time $t$. So the above formula factors out the stochasticity of interest rates. For non-path-dependent products, this means that we can forget about the risk-neutral measure altogether. The only thing that matters is the distribution of the terminal cash-flow $V_T$ under the $T$-forward measure $\mathbb{Q}^T$ associated with the numeraire $Z_{t,T}$. Most people without a rates background feel uncomfortable with this measure at the first. Why introduce this fictional measure when we have the risk neutral one?
Well, first, the so-called risk-neutral measure is just as fictional. It is purely a mathematical construct whose existence is derived, under some strong assumptions, from the only measure that matters: the historical measure $\mathbb{P}$.
Moreover, this is how the market participants actually think! Indeed, in option markets, participants quote implied volatilities. If $C_t(T,K)$ is the value of a call with maturity $T$ and strike $K$ at time $t$, the corresponding BS implied volatility is
$$
C_t(T,K) = Z_{t,T}BS\left(t,F_{t,T};T,K;\Sigma_{BS}\right)
$$
where
$$
BS(t,F;T,K;\sigma) = FN\left( -\frac{\log(K/F)}{\sigma\sqrt{T-t}} + \frac{1}{2}\sigma\sqrt{T-t} \right) - KN\left(-\frac{\log(K/F)}{\sigma\sqrt{T-t}} - \frac{1}{2}\sigma\sqrt{T-t} \right)
$$
In order to agree on the current price, participants need to agree on the vol and on $Z_{t,T}$. But, in practice, market participants do not need to agree on the fair price. What is required is for each counterparty to estimate that the trade is beneficial to them. If you have a better estimate of $Z_{t,T}$ then you can arbitrage the other counterparty. This is exactly what happened after the 2008 crisis when some were still using USD Libor rates as "risk-free" discount rates when others were discounting at OIS rates (the interest rate on collateral).
Writing $F_{t,T} = S_t/Z_{t,T}$, the implied volatility can be seen as a function $\Sigma_{BS}(t,S,Z;T,K)$ where the variables after the semi-colon are fixed (they refer to the maturity and strike in the option contract) while those before that will evolve stochastically with $t$. The dependency wrt to the strike is the well-known volatility smile. The dependency wrt to the spot $S$ is known as the volatility backbone. The dependency wrt to $t$ is essentially what people call Theta (or at least its volatility component). The dependency wrt $Z$ corresponds to the IR risk. This risk is negligible in short dated options but not in long-dated ones.