These are the instructions for running two SSH daemons in a Systemd server distro, Redhat-style (RHEL, CentOS, and Scientific Linux). Click here if you need the instructions for a SysV Init distro.
THE FOLLOWING IS OFFERED WITHOUT WARRANTY OF ANY KIND. THIS IS WHAT I DID, BUT YOU MAY NEED TO DO SOMETHING DIFFERENT. YOU ARE RESPONSIBLE FOR ALL CHANGES TO YOUR SYSTEM. IF IT BREAKS, YOU GET TO FIX IT.
(Redhat provides an example for "Creating a second instance of the sshd service" in the RHEL System Administrator's Guide but I believe that the example is incomplete.)
You may need to horizontally scroll the code boxes shown below.
I started with a single SSH daemon set up to listen only on the lan NIC. Then:
# cd /etc/ssh # cp -a sshd_config othersshd_config
# semanage port -a -t ssh_port_t -p tcp XXXXX
# cd /etc/systemd/system # cp -a /usr/lib/systemd/system/sshd.service othersshd.service # cp -a /usr/lib/systemd/system/sshd-keygen.service othersshd-keygen.service # cp -a /usr/lib/systemd/system/sshd.socket othersshd.socket
# cd /usr/sbin # cp -a sshd-keygen othersshd-keygen
# othersshd-keygen
# cd /usr/sbin/ # ln -s sshd othersshd # cd /etc/pam.d # ln -s sshd othersshd
# cd /etc/firewalld # cp -a /usr/lib/firewalld/services/ssh.xml otherssh.xml
# systemctl enable othersshd.service # systemctl start othersshd.service
There is a drawback to this scheme: if a system software update changes any of the ssh config or init files, I have to manually make similar changes to the files I've copied and modified.