Mit `\opening{}` wird keine Anrede gesetzt, also nimmt sie auch keinen Platz ein. Soll Platz für eine Anrede reserviert werden, so verwendet man ein nicht leeres Argument, das aber zu einer keiner sichtbaren Ausgabe führt, beispielsweise `\opening{~}` oder `\opening{\mbox{}}` oder `\opening{\phantom{Lieber Peter}}` oder wenn man mehr Platz braucht, auch:
\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\begin{document}
\begin{letter}{%
Petra Mustermann\\
Vor dem Berg 1\\
12345 Musterhausen%
}
\opening{\rule{0pt}{2cm}}
%\opening{~}
\blindtext
\end{letter}
\end{document}
Eine Alternative bestünde darin, einfach die Pseudolänge `refaftervskip` zu erhöhen und dann doch ein leeres Argument zu verwenden:
\documentclass[version=last]{scrlttr2}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\begin{document}
\begin{letter}{%
Petra Mustermann\\
Vor dem Berg 1\\
12345 Musterhausen%
}
\addtoplength{refaftervskip}{\baselineskip}
\opening{}
\blindtext
\end{letter}
\end{document}
Die Pseudolängen sind in Teil II der KOMA-Script-Anleitung dokumentiert. Dass der Briefbogen bei `scrlttr2` von `\opening` ausgegeben wird, ist übrigens ebenfalls in der Anleitung dokumentiert.