신성을 함락시키고 집결한 당의 대군은 667년 10월, 당나라 방동선과 고구려 항장 고간을 선봉으로 동남쪽으로 진공을 시작한다. 이에 맞서 고구려 또한 대막리지 연남건은 요충지였던 신성을 회복하기 위해 고구려의 주력이자 정예부대 20만 대군을 모두 소집하여 당의 군대를 요격하려 보냈다.

마침내 고구려의 20만 대군은 동남쪽으로 진공하던 방동선과 고간의 당나라 선봉 부대를 금산에서 만나게 되었고 곧이어 치열한 격전이 벌어진다. 방동선과 고간의 당나라 군대는 갑작스러운 고구려 대군에게 밀려 크게 대패하고 도망치고 이에 승기를 잡고 고구려 군이 계속하여 추격하였다. 하지만, 또 다시 설인귀의 군대가 신속하게 구원하어 나타나 측면에서 갑작스러운 반격에 나섰고, 이에 고구려 군은 혼란에 빠져 크게 패하여 5만명을 잃고 무너져 후퇴하였다.

고구려의 주력 대군에 반격을 가하여 후퇴시킨 설인귀, 방동선, 고간의 당나라 군은 이제 승리를 틈타 남소(南蘇, 지금의 요동 무순 동쪽 소자하와 혼하가 만나는 곳), 목저(木底, 요녕 신빈 서목기진), 창암(蒼巖, 국내성 서쪽)의 3성을 신속히 점령하고, 고구려를 떠나 당에 투항했던 연남생의 고구려 군대와 마침내 회합하게 된다. 이제 당의 군대는 당에 투항한 연남생의 고구려 군과 연합되어 금산에서 대치하고 있는 고구려 대군과 다시 격돌하게 된다.

자세한 전투기록은 중국측 사서에도 나와 있지 않지만 당에 항복한 연남생의 고구려 군을 포함하여 모두 집결한 이세적의 당나라 대군은 금산(金山)에서 고구려 군과 건곤일척의 대 전투를 치루었으며 고구려 군을 크게 패퇴시켰다. 치열한 전투가 끝난 후 당 고종은 친필서신을 직접 써서 금산전투에서 공이 컸던 설인귀를 위무한다.

금산전투는 당나라 초기에 드물게 보는 대규모 전투였고, 당의 역사서에 나와 있는 당이 고구려와 싸운 4대 전투 중 전쟁의 향방을 가른 가장 중요한 전투였고, 과거 제1차 고구려-당 전쟁 때의 주필산 전투와 같은 고구려와 당의 대군이 격돌한 대규모의 전투였다.

이로써 과거 수나라의 고구려 정벌, 당나라의 제1차 침공 때와 같은 전통적인 중화 왕조의 동방 침입 루트에 대한 고구려의 천리장성 방어선은 아직 요동 남단의 안시성, 건안성들이 건재하였지만 요충지 신성과 그 후방의 주변 남소, 목저, 창암성들이 함락되었고 방어선 실질적으로 고구려의 주 방위선이었던 천리장성 방어선은 붕괴 되었다.

무엇보다도 과거 645년 제1차 고구려-당 전쟁 때는 개모, 요동, 백암 등 요동의 주요 성들이 함락 되었지만 고구려 주력부대는 보존되어 안시성 근처 주필산에서 당나라의 군대와 대치하고 있었고, 661년 제2차 고구려-당 전쟁 때는 비록 압록강 유역에서 연남생이 이끄는 고구려 군대가 궤멸하고 수도 평양성이 포위되었지만 역시 고구려의 주력부대는 요동에 존재하고 있어 당나라 군대의 작전 행동에 제약이 있을 수 밖에 없었다. 하지만 제3차 고구려-당 전쟁에서는 요충지 신성의 함락과 연남생이 이끄는 투항세력에 이어 금산전투를 통하여 기본적으로 고구려 군의 주력 정예부대는 소멸되어 버렸고 이후 전쟁의 전개는 당과 고구려의 군사적 균형이 무너져 고구려의 일방적인 열세로 돌아서게 된다.
당과 고구려의 연합군과 대치하고 있는 고구려군의 대장은?
연남생