diff --git a/cmd/peerserver/main.go b/cmd/peerserver/main.go
index 7a5d5708ea4f168c69817d34392ae259b6d82f50..341c4dbb9d031f6fa47829c90cd070e0a94b0d6c 100644
--- a/cmd/peerserver/main.go
+++ b/cmd/peerserver/main.go
@@ -18,6 +18,7 @@ package main
 
 import (
 	"crypto/elliptic"
+	"flag"
 	"log"
 	"os"
 
@@ -26,7 +27,19 @@ import (
 	"github.com/ethereum/go-ethereum/p2p"
 )
 
+var (
+	natType    = flag.String("nat", "", "NAT traversal implementation")
+	pmpGateway = flag.String("gateway", "", "gateway address for NAT-PMP")
+	listenAddr = flag.String("addr", ":30301", "listen address")
+)
+
 func main() {
+	flag.Parse()
+	nat, err := p2p.ParseNAT(*natType, *pmpGateway)
+	if err != nil {
+		log.Fatal("invalid nat:", err)
+	}
+
 	logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, log.LstdFlags, logger.InfoLevel))
 	key, _ := crypto.GenerateKey()
 	marshaled := elliptic.Marshal(crypto.S256(), key.PublicKey.X, key.PublicKey.Y)
@@ -34,8 +47,8 @@ func main() {
 	srv := p2p.Server{
 		MaxPeers:   100,
 		Identity:   p2p.NewSimpleClientIdentity("Ethereum(G)", "0.1", "Peer Server Two", marshaled),
-		ListenAddr: ":30301",
-		NAT:        p2p.UPNP(),
+		ListenAddr: *listenAddr,
+		NAT:        nat,
 		NoDial:     true,
 	}
 	if err := srv.Start(); err != nil {