{"id":358,"date":"2016-12-11T12:18:53","date_gmt":"2016-12-11T10:18:53","guid":{"rendered":"http:\/\/blog.syshalt.net\/?p=358"},"modified":"2022-02-28T15:10:41","modified_gmt":"2022-02-28T13:10:41","slug":"upnp-enable-on-debian-gnulinux-8-iptables","status":"publish","type":"post","link":"https:\/\/blog.syshalt.net\/index.php\/2016\/12\/11\/upnp-enable-on-debian-gnulinux-8-iptables\/","title":{"rendered":"UPnP configure on Debian GNU\/Linux 8 (iptables)"},"content":{"rendered":"<p>This tutorial is intented for people who use a linux box as their router and need UPnP for Games or any other services. I had a problem playing Destiny with two Playstation 4 consoles in same house, getting error when tried to join a fireteam: Unable to join target player. Please try again<\/p>\n<p>I assume PPP0 is your PPPoE Interface and eth0 is your external WAN interface (used by PPPoE) and eth1 your LAN interface<\/p>\n<p><strong>&#8211; Install package<\/strong><\/p>\n<p>apt-get update<br \/>\napt-get install libupnp6 libupnp6-dev linux-igd<\/p>\n<p><strong>&#8211; Configure<\/strong><\/p>\n<p>\/etc\/upnpd.conf<\/p>\n<p># To change the interfaces used edit:<br \/>\n# \/etc\/default\/linux-igd<\/p>\n<p>iptables_location = &#8220;\/sbin\/iptables&#8221;<br \/>\ndebug_mode = 2<br \/>\ncreate_forward_rules = yes<br \/>\nforward_rules_append = no<br \/>\nforward_chain_name = UPNP_FORWARD<br \/>\nprerouting_chain_name = UPNP_PREROUTING<br \/>\n#upstream_bitrate = 512000<br \/>\n#downstream_bitrate = 512000<br \/>\nduration = 86400<br \/>\ndescription_document_name = gatedesc.xml<br \/>\nxml_document_path = \/etc\/linuxigd<br \/>\nlistenport = 0<br \/>\nparanoid = 0<\/p>\n<p>\/etc\/default\/linux-igd<\/p>\n<p>EXTIFACE=ppp0<br \/>\nINTIFACE=eth1<br \/>\nALLOW_MULTICAST=yes<br \/>\n#UPNPD_USER=$NAME:$NAME<br \/>\n#UPNPD_GROUP=$NAME<br \/>\n#CHROOT_DIR=\/var\/chroot\/$NAME<br \/>\nforward_chain_name=UPNP_FORWARD<br \/>\nprerouting_chain_name=UPNP_PREROUTING<\/p>\n<p>&#8211; <strong>IPTABLES<\/strong><\/p>\n<p># UPNP (before INPUT)<br \/>\niptables -t filter -N UPNP_FORWARD<br \/>\niptables -t filter -A FORWARD -j UPNP_FORWARD<br \/>\niptables -t nat -N UPNP_PREROUTING<br \/>\niptables -t nat -A PREROUTING -j UPNP_PREROUTING<\/p>\n<p># INPUT<br \/>\niptables -t filter -A INPUT -i eth1 -d 239.0.0.0\/8 -j ACCEPT<br \/>\niptables -t filter -A INPUT -i eth1 -p tcp &#8211;dport 49152 -j ACCEPT<br \/>\niptables -t filter -A INPUT -i eth1 -p udp &#8211;dport 1900 -j ACCEPT<\/p>\n<p>&#8211; <strong>ROUTE<br \/>\n<\/strong>route add -net 239.0.0.0 netmask 255.0.0.0 eth1<\/p>\n<p><strong>&#8211; Enable linux-igd (systemctl)<\/strong><\/p>\n<p>systemctl enable linux-igd.service<br \/>\nsystemctl start linux-igd.service<\/p>\n<p><strong>&#8211; Check if everything is working<\/strong><\/p>\n<p>iptables -L<\/p>\n<p>Example:<\/p>\n<p>Chain INPUT (policy DROP)<br \/>\ntarget\u00a0\u00a0\u00a0\u00a0 prot opt source\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 destination<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 all\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 all\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 all\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state RELATED,ESTABLISHED<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 icmp &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 icmp echo-request<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 tcp\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tcp dpt:http<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 tcp\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tcp dpt:https<\/p>\n<p>Chain FORWARD (policy DROP)<br \/>\ntarget\u00a0\u00a0\u00a0\u00a0 prot opt source\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 destination<br \/>\nUPNP_FORWARD\u00a0 all\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere<br \/>\nTCPMSS\u00a0\u00a0\u00a0\u00a0 tcp\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tcp flags:SYN,RST\/SYN TCPMSS clamp to PMTU<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 all\u00a0 &#8212;\u00a0 192.168.1.0\/24\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 anywhere<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 all\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.168.1.0\/24\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state RELATED,ESTABLISHED<\/p>\n<p>Chain OUTPUT (policy ACCEPT)<br \/>\ntarget\u00a0\u00a0\u00a0\u00a0 prot opt source\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 destination<\/p>\n<p>Chain UPNP_FORWARD (1 references)<br \/>\ntarget\u00a0\u00a0\u00a0\u00a0 prot opt source\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 destination<br \/>\nACCEPT\u00a0\u00a0\u00a0\u00a0 udp\u00a0 &#8212;\u00a0 anywhere\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 192.168.1.104\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 udp dpt:9308<\/p>\n<p>iptables -S<\/p>\n<p>-P INPUT DROP<br \/>\n-P FORWARD DROP<br \/>\n-P OUTPUT ACCEPT<br \/>\n-N UPNP_FORWARD<br \/>\n-A INPUT -i lo -j ACCEPT<br \/>\n-A INPUT -i eth1 -j ACCEPT<br \/>\n-A INPUT -m state &#8211;state RELATED,ESTABLISHED -j ACCEPT<br \/>\n-A INPUT -p icmp -m icmp &#8211;icmp-type 8 -j ACCEPT<br \/>\n-A INPUT -i ppp0 -p tcp -m tcp &#8211;dport 80 -j ACCEPT<br \/>\n-A INPUT -i ppp0 -p tcp -m tcp &#8211;dport 443 -j ACCEPT<br \/>\n-A FORWARD -j UPNP_FORWARD<br \/>\n-A FORWARD -p tcp -m tcp &#8211;tcp-flags SYN,RST SYN -j TCPMSS &#8211;clamp-mss-to-pmtu<br \/>\n-A FORWARD -s 192.168.1.0\/24 -o ppp0 -j ACCEPT<br \/>\n-A FORWARD -d 192.168.1.0\/24 -i ppp0 -m state &#8211;state RELATED,ESTABLISHED -j ACCEPT<br \/>\n-A UPNP_FORWARD -d 192.168.1.104\/32 -p udp -m udp &#8211;dport 9308 -j ACCEPT<\/p>\n<p>You can use this application to test if your linux box (router gateway) is accepting\/discoverable UPnP requests.<\/p>\n<p>Application (Windows): http:\/\/noeld.com\/dl.asp?filename=upnptest.zip<br \/>\nWebsite of author: http:\/\/noeld.com\/programs.asp?cat=dstools<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial is intented for people who use a linux box as their router and need UPnP for Games or any other services. I had a problem playing Destiny.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[560,562,563,559,564,565,561,558],"class_list":["post-358","post","type-post","status-publish","format-standard","hentry","category-linux","tag-debian","tag-destiny","tag-games","tag-iptables","tag-libupnp6","tag-linux-igd","tag-playstation","tag-upnp"],"_links":{"self":[{"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/posts\/358","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/comments?post=358"}],"version-history":[{"count":11,"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/posts\/358\/revisions"}],"predecessor-version":[{"id":411,"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/posts\/358\/revisions\/411"}],"wp:attachment":[{"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/media?parent=358"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/categories?post=358"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.syshalt.net\/index.php\/wp-json\/wp\/v2\/tags?post=358"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}