Происходил из древнего дворянского рода Тверской и Ярославской губерний.
В октябре 1845 года Николай Казнаков одиннадцатилетним мальчиком был определён в Александровский кадетский корпус. 18 августа 1850 года произведен в чин гардемарина. 13 августа 1852 года окончил Морской кадетский корпус и был оставлен для дальнейшего обучения в Офицерском классе. 4 мая 1855 года произведен в чин лейтенанта. В январе 1862 году он был произведён в чин капитан-лейтенанта с назначением адъютантом к Его Императорскому Высочеству генерал-адмиралу великому князю Константину Николаевичу. 12 октября 1863 года назначен командиром броненосной башенной лодки «Вещун». 27 марта 1866 года назначен командиром клипера «Яхонт», а в следующем году был награжден орденом Св. Станислава 2-й степени с императорской короной. 22 апреля 1868 года Казнаков был назначен командиром корвета «Аскольд» с переводом в 7-й флотский экипаж, а в следующем году был награжден орденом Св. Анны 2-й степени.
1 января 1870 года произведен в чин капитана 2-го ранга и назначен командиром пароходофрегата «Рюрик». В 1871 году исправлял обязанности начальника штаба главного командира Николаевского порта. 16 апреля 1872 года за отличие по службе произведен в чин капитана 1-го ранга.
Во время Русско-турецкой войны 1877—1878 Казнаков командовал Нижнедунайской флотилией и за отличие был награжден орденом Св. Владимира 3-й степени.
1января 1879 года Казнакову было пожаловано звание флигель-адъютанта, а 13 апреля он был отчислен от командования Нижнедунайской флотилией и назначен начальником штаба главного командира Черноморского флота и портов. В 1880-1882 годах занимал должность директора канцелярии Морского министерства. В 1882 году за отличие по службе был произведен в чин контр-адмирала. В 1883-1884 годах исправлял должности директора Инспекторского департамента Морского министерства и члена Главного военно-тюремного комитета. 10 октября 1886 года назначен главным инспектором морской артиллерии. 1 января 1889 года произведен в чин вице-адмирала, а в 1891 году был назначен старшим флагманом Балтийского флота. В 1890 году был избран почетным членом Российского минералогического общества и 28 декабря 1892 года - членом Конференции Николаевской морской академии.
В 1893 году командовал российской эскадрой, посетившей Соединенные Штаты для участия в праздновании 400-летия открытия Америки. После возвращения на родину был назначен 30 августа 1893 года главным командиром Кронштадтского порта и военным губернатором Кронштадта и исполнял эту должность до 6 декабря 1899 года. За свою административную деятельность Николай Иванович был избран почетным гражданином Кронштадта.
6 декабря 1899 года назначен членом Адмиралтейств-совета, а 6 декабря 1901 года произведен в чин адмирала. 13 августа 1902 года Казнаков был назначен генерал-адъютантом к Его Императорскому Величеству.
Был представителем России в международной следственной комиссии по так называемому Гулльскому инциденту.