Here is one way I found, in the absence of any way to directly query my router under program control from inside the LAN:
Set up an active page of some sort (I used ASP) out on a hosted server outside of your LAN. The page reads servervariable REMOTE_ADDR to extract the WAN-side address assigned to my router when it is named in a request.
Set up a triggered HTTP request to that page. This could be a VB app running on one of your PCs inside the LAN (possibly using a component like XMLHTTP), or it could be the active page I just discussed with a little JavaScript that periodically redirects the document location on the browser running on one of your LAN-connected PCs to itself.
Either way, you get the benefit of the outside server's perspective in reading your current IP address. If you need to get that IP address for an application running internally on your LAN, it then becomes a matter of parsing the information out of the page returned from the ASP page on the outside server. To my mind, that is where the use of a component like XMLHTTP to capture the response as a string you can examine makes life easier.