거란은 발해를 멸하고 만몽 지방에 일대 제국을 건설하여 남으로 새로 일어난 송을 압박하고 동으로 압록강 유역에 있는 여진을 쳐서 고려와 경계를 접하게 되었다. 그러므로 북진하는 고려와 동진하는 거란이 자연히 충돌을 면할 수 없게 되었다. 더욱 고려는 송나라와 친하게 지내며 고려와 송이 연합하여 거란을 견제하려고 한 때문에 성종 12년에(단기 3326년, 993년) 거란이 침입하였다. 이때 거란 장수 소손녕이 대군을 거느리고 국경에 나타나 신라의 뒤를 이은 고려가 고구려 옛 땅을 차지할 것이 아니니 도로 내어놓으라고 말하였다. 고려 조정에서는 적의 기세를 두려워하여 땅을 베어 주자는 사람이 많았으나, 서희가 이것을 반대하고 위험을 무릅쓰고 적진 중에 들어가 “우리나라는 고구려의 뒤를 이었기 때문에 국호도 고려라 하였다. 만일 고구려의 옛 땅을 가지고 말한다면 귀국의 동경[요양]도 우리나라의 것이다”라고 항변하였다. 이후 고려는 송과의 관계를 끊고 거란과 교빙할 것과 거란에 왕래하기 위하여 고려는 압록강 이동의 여진 땅을 점령할 것을 약속하였다. 서희는 이렇게 외교적 묘완을 써서 거란을 돌려보냈으며, 이듬해부터 해마다 여진을 토벌하여 흥화진[의주], 용주[용천], 통주[신천], 철주[철산], 귀주[귀성], 곽주[곽산] 등 이른바 강동 6주를 설치하여 영토를 압록강까지 넓혔다.