* protocol 50 unreachable
@ 2004-12-01 22:51 Helge Weissig
2004-12-01 23:59 ` John A. Sullivan III
` (2 more replies)
0 siblings, 3 replies; 29+ messages in thread
From: Helge Weissig @ 2004-12-01 22:51 UTC (permalink / raw)
To: Netfilter Mailing List
Sorry for the cross-post, but this problem is really nagging me. What I
did not put into the post below is the fact that it only occurred after a
reboot of my linux system due to a short power outage. Here is the routing
table, if that makes any difference:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
xx.xx.xx.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 xx.xx.xx.1 0.0.0.0 UG 0 0 0 eth0
the xx.xx.xx is the first part of my external ip address.
thanks for any advice or insight!
h.
From: helgew@grajagan.org (Helge Weissig)
Newsgroups: comp.security.firewalls
Subject: protocol 50 unreachable
NNTP-Posting-Host: 63.196.131.66
Message-ID: <a1a4b233.0411301146.3c342dce@posting.google.com>
Hi,
I have been searching for information about this problem high and low
but came up dry. Basically, I am trying to connect to a VPN server via
ipsec from behind a NAT firewall set up on a Linux (kernel 2.4.x) box
with iptables. I have no problem establishing the connection via port
500 as this is initiated by the client. However, I cannot seem to get
protocol 50 (ESP) to work, independent of whether the ipsec tunnel is
established or not. I have tried every incantation of iptables rules I
could find, to no avail. When I set up tcdump on both interfaces on my
server as well as on the client behind it, a port I have opened for
forwarding responds as expected. If I run 'nmap -sO' from somewhere
outside however, it will report protocol 50 as open although the
external interface reports a 'icmp: xx.xx.xx.xx protocol 50
unreachable' response and the two other interfaces never see the
traffic.
Here is my current iptables configuration
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
echo "Enabling PORTFW Redirection on the external LAN.."
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p esp -j ACCEPT
$IPTABLES -A PREROUTING -t nat -d $VPN_SERVER -p esp -j DNAT \
--to-destination $VPN_CLIENT
echo " FWD: Allow all connections OUT and only existing and related
ones IN"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \
--state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
$IPTABLES -A FORWARD -j LOG
echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF"
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
here is the tcpdump info I see on $EXTIF:
10:23:09.234937 (vpn server ip) > (my ip): ESP(spi=0x00000000,seq=0x0)
10:23:09.235055 (my ip) > (vpn server ip): icmp: (my ip) protocol 50
unreachable [tos 0xc0]
(these are empty packets sent by nmap but it looks the same for legit
ones coming from the vpn server ip). FWIW, when the ipsec tunnel is
established and I try to ping the a host behind the vpn server, I see
the outgoing packets on all three interfaces, but not response.
thanks for any information or pointers in advance!
h.
^ permalink raw reply [flat|nested] 29+ messages in thread* Re: protocol 50 unreachable 2004-12-01 22:51 protocol 50 unreachable Helge Weissig @ 2004-12-01 23:59 ` John A. Sullivan III 2004-12-02 0:07 ` Helge Weissig 2004-12-02 0:29 ` Jason Opperisano 2004-12-04 17:07 ` Helge Weissig 2 siblings, 1 reply; 29+ messages in thread From: John A. Sullivan III @ 2004-12-01 23:59 UTC (permalink / raw) To: Helge Weissig; +Cc: Netfilter Mailing List On Wed, 2004-12-01 at 17:51, Helge Weissig wrote: > Sorry for the cross-post, but this problem is really nagging me. What I > did not put into the post below is the fact that it only occurred after a > reboot of my linux system due to a short power outage. Here is the routing > table, if that makes any difference: > > Kernel IP routing table > Destination Gateway Genmask Flags Metric Ref Use Iface > 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 > xx.xx.xx.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 > 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo > 0.0.0.0 xx.xx.xx.1 0.0.0.0 UG 0 0 0 eth0 > > the xx.xx.xx is the first part of my external ip address. > > thanks for any advice or insight! > h. > > > > From: helgew@grajagan.org (Helge Weissig) > Newsgroups: comp.security.firewalls > Subject: protocol 50 unreachable > NNTP-Posting-Host: 63.196.131.66 > Message-ID: <a1a4b233.0411301146.3c342dce@posting.google.com> > > Hi, > > I have been searching for information about this problem high and low > but came up dry. Basically, I am trying to connect to a VPN server via > ipsec from behind a NAT firewall set up on a Linux (kernel 2.4.x) box > with iptables. I have no problem establishing the connection via port > 500 as this is initiated by the client. However, I cannot seem to get > protocol 50 (ESP) to work, independent of whether the ipsec tunnel is > established or not. I have tried every incantation of iptables rules I > could find, to no avail. When I set up tcdump on both interfaces on my > server as well as on the client behind it, a port I have opened for > forwarding responds as expected. If I run 'nmap -sO' from somewhere > outside however, it will report protocol 50 as open although the > external interface reports a 'icmp: xx.xx.xx.xx protocol 50 > unreachable' response and the two other interfaces never see the > traffic. > > Here is my current iptables configuration > > $IPTABLES -P INPUT ACCEPT > $IPTABLES -F INPUT > $IPTABLES -P OUTPUT ACCEPT > $IPTABLES -F OUTPUT > $IPTABLES -P FORWARD DROP > $IPTABLES -F FORWARD > $IPTABLES -t nat -F > > echo "Enabling PORTFW Redirection on the external LAN.." > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p esp -j ACCEPT > $IPTABLES -A PREROUTING -t nat -d $VPN_SERVER -p esp -j DNAT \ > --to-destination $VPN_CLIENT > > echo " FWD: Allow all connections OUT and only existing and related > ones IN" > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \ > --state ESTABLISHED,RELATED -j ACCEPT > $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT > $IPTABLES -A FORWARD -j LOG > > echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" > $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE > > here is the tcpdump info I see on $EXTIF: > > 10:23:09.234937 (vpn server ip) > (my ip): ESP(spi=0x00000000,seq=0x0) > 10:23:09.235055 (my ip) > (vpn server ip): icmp: (my ip) protocol 50 > unreachable [tos 0xc0] > > (these are empty packets sent by nmap but it looks the same for legit > ones coming from the vpn server ip). FWIW, when the ipsec tunnel is > established and I try to ping the a host behind the vpn server, I see > the outgoing packets on all three interfaces, but not response. > > thanks for any information or pointers in advance! > h. Silly question but, since the problem started after a reboot, are you sure that ESP is running on your client? Are you using *swan or the native 2.6 IPSec implementation on the client? -- John A. Sullivan III Chief Technology Officer Nexus Management +1 207-985-7880 john.sullivan@nexusmgmt.com --- If you are interested in helping to develop a GPL enterprise class VPN/Firewall/Security device management console, please visit http://iscs.sourceforge.net ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-01 23:59 ` John A. Sullivan III @ 2004-12-02 0:07 ` Helge Weissig 0 siblings, 0 replies; 29+ messages in thread From: Helge Weissig @ 2004-12-02 0:07 UTC (permalink / raw) To: Netfilter Mailing List Thanks for getting back to me, John. Here are some more details and an attempt at clarification: The client is a laptop running MacOS X and VPN Tracker. It sits on the private LAN and as I mentioned in the post, I can see outgoing traffic (e.g. pings of VPN hosts) going *out* through ESP (i.e. all three interfaces - client, internal and external - report ESP packets going out). The client s/w log also indicates "ESP tunnel established". Regardless though, if I just try to get any ESP traffic *into* the client, from outside the firewall, it only shows up on the external interface and triggers the described response. cheers, h. On Wed, 1 Dec 2004 at 18:59 -0500, John A. Sullivan III wrote: [snip] JASI> Silly question but, since the problem started after a reboot, are JASI> you sure that ESP is running on your client? Are you using *swan or JASI> the native 2.6 IPSec implementation on the client? ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-01 22:51 protocol 50 unreachable Helge Weissig 2004-12-01 23:59 ` John A. Sullivan III @ 2004-12-02 0:29 ` Jason Opperisano 2004-12-02 3:29 ` Helge Weissig 2004-12-02 4:03 ` John A. Sullivan III 2004-12-04 17:07 ` Helge Weissig 2 siblings, 2 replies; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 0:29 UTC (permalink / raw) To: netfilter On Wed, 2004-12-01 at 17:51, Helge Weissig wrote: <snip> > Here is my current iptables configuration > > $IPTABLES -P INPUT ACCEPT > $IPTABLES -F INPUT > $IPTABLES -P OUTPUT ACCEPT > $IPTABLES -F OUTPUT > $IPTABLES -P FORWARD DROP > $IPTABLES -F FORWARD > $IPTABLES -t nat -F > > echo "Enabling PORTFW Redirection on the external LAN.." > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p esp -j ACCEPT > $IPTABLES -A PREROUTING -t nat -d $VPN_SERVER -p esp -j DNAT \ > --to-destination $VPN_CLIENT what on earth is that rule supposed to accomplish? it's says "any esp packet destined for $VPN_SERVER should be destination translated to $VPN_CLIENT." if this is the firewall in front of $VPN_CLIENT (which it sounds like it is), you have created (for lack of a better term) a packet reflector. any esp packet sent from VPN client to VPN server will be spit back at the VPN client. > echo " FWD: Allow all connections OUT and only existing and related > ones IN" > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \ > --state ESTABLISHED,RELATED -j ACCEPT > $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT > $IPTABLES -A FORWARD -j LOG > > echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" > $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE > > here is the tcpdump info I see on $EXTIF: > > 10:23:09.234937 (vpn server ip) > (my ip): ESP(spi=0x00000000,seq=0x0) > 10:23:09.235055 (my ip) > (vpn server ip): icmp: (my ip) protocol 50 > unreachable [tos 0xc0] > > (these are empty packets sent by nmap but it looks the same for legit > ones coming from the vpn server ip). FWIW, when the ipsec tunnel is > established and I try to ping the a host behind the vpn server, I see > the outgoing packets on all three interfaces, but not response. > > thanks for any information or pointers in advance! > h. simplify: # start fresh for t in mangle nat filter; do iptables -t $t -F iptables -t $t -X iptables -t $t -Z done for c in INPUT FORWARD OUTPUT; do iptables -P $c ACCEPT done # hide-nat outbound traffic iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE # ip forwarding sysctl -w net.ipv4.ip_forward=1 try and connect with your VPN client to your VPN server with that script. if you can't connect--it's more likely an IPSec configuration detail that your missing. -j -- "This has purple stuff inside - purple is a fruit." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 0:29 ` Jason Opperisano @ 2004-12-02 3:29 ` Helge Weissig 2004-12-02 3:46 ` Jason Opperisano 2004-12-02 4:03 ` John A. Sullivan III 1 sibling, 1 reply; 29+ messages in thread From: Helge Weissig @ 2004-12-02 3:29 UTC (permalink / raw) To: Netfilter Mailing List On Wed, 1 Dec 2004 at 19:29 -0500, netfilter-bounces@lists.netfilter.org wrote: JO> On Wed, 2004-12-01 at 17:51, Helge Weissig wrote: JO> <snip> JO> > Here is my current iptables configuration JO> > JO> > $IPTABLES -P INPUT ACCEPT JO> > $IPTABLES -F INPUT JO> > $IPTABLES -P OUTPUT ACCEPT JO> > $IPTABLES -F OUTPUT JO> > $IPTABLES -P FORWARD DROP JO> > $IPTABLES -F FORWARD JO> > $IPTABLES -t nat -F JO> > JO> > echo "Enabling PORTFW Redirection on the external LAN.." JO> > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p esp -j ACCEPT JO> > $IPTABLES -A PREROUTING -t nat -d $VPN_SERVER -p esp -j DNAT \ JO> > --to-destination $VPN_CLIENT JO> JO> what on earth is that rule supposed to accomplish? it's says "any esp JO> packet destined for $VPN_SERVER should be destination translated to JO> $VPN_CLIENT." [snip] my bad... when I obfuscated my script, I should have used "$EXT_IP" or something like it. That IP and the VPN server's are very similar. [snip] JO> simplify: JO> JO> # start fresh JO> for t in mangle nat filter; do JO> iptables -t $t -F JO> iptables -t $t -X JO> iptables -t $t -Z JO> done JO> for c in INPUT FORWARD OUTPUT; do JO> iptables -P $c ACCEPT JO> done JO> JO> # hide-nat outbound traffic JO> iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE JO> JO> # ip forwarding JO> sysctl -w net.ipv4.ip_forward=1 JO> JO> try and connect with your VPN client to your VPN server with that JO> script. if you can't connect--it's more likely an IPSec configuration JO> detail that your missing. no such luck :(. I should note that the VPN connections works fine when I hook the client up directly to my DSL line. btw - it looks like your script does not forward anything from one of my interfaces to the other. cheers, h. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 3:29 ` Helge Weissig @ 2004-12-02 3:46 ` Jason Opperisano 2004-12-02 4:00 ` Helge Weissig 0 siblings, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 3:46 UTC (permalink / raw) To: netfilter On Wed, 2004-12-01 at 22:29, Helge Weissig wrote: > my bad... when I obfuscated my script, I should have used "$EXT_IP" or > something like it. That IP and the VPN server's are very similar. ok... > JO> > JO> try and connect with your VPN client to your VPN server with that > JO> script. if you can't connect--it's more likely an IPSec configuration > JO> detail that your missing. > > no such luck :(. I should note that the VPN connections works fine when I > hook the client up directly to my DSL line. btw - it looks like your > script does not forward anything from one of my interfaces to the other. yeah--precisely. you seem obsessed with the desire to "port forward" esp traffic to your VPN client, which is absolutely not necessary. look into configuring NAT-T with your VPN client, sometimes called "UDP Encapsulation" as your VPN server appears unwilling to accept esp packets that have traversed an intermediate NAT device. -j -- "Mmmm...free goo." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 3:46 ` Jason Opperisano @ 2004-12-02 4:00 ` Helge Weissig 2004-12-02 4:09 ` John A. Sullivan III 2004-12-02 4:12 ` Jason Opperisano 0 siblings, 2 replies; 29+ messages in thread From: Helge Weissig @ 2004-12-02 4:00 UTC (permalink / raw) To: Netfilter Mailing List On Wed, 1 Dec 2004 at 22:46 -0500, Jason Opperisano wrote: JO> > no such luck :(. I should note that the VPN connections works fine when I JO> > hook the client up directly to my DSL line. btw - it looks like your JO> > script does not forward anything from one of my interfaces to the other. JO> JO> yeah--precisely. you seem obsessed with the desire to "port forward" JO> esp traffic to your VPN client, which is absolutely not necessary. JO> JO> look into configuring NAT-T with your VPN client, sometimes called "UDP JO> Encapsulation" as your VPN server appears unwilling to accept esp JO> packets that have traversed an intermediate NAT device. hmm... how does a packet know it needs to go from my external NIC to my internal NIC if it comes through ESP? Maybe I am confused here... let's leave the VPN client/server out of the picture to simplify. If I send an ESP packet from somewhere to my external IP address I get the "protocol 50 unreachable" ICMP response. The underlying problem seems to be the primary cause of my troubles, no? h. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 4:00 ` Helge Weissig @ 2004-12-02 4:09 ` John A. Sullivan III 2004-12-02 4:12 ` Jason Opperisano 1 sibling, 0 replies; 29+ messages in thread From: John A. Sullivan III @ 2004-12-02 4:09 UTC (permalink / raw) To: Helge Weissig; +Cc: Netfilter Mailing List On Wed, 2004-12-01 at 23:00, Helge Weissig wrote: > On Wed, 1 Dec 2004 at 22:46 -0500, Jason Opperisano wrote: > > JO> > no such luck :(. I should note that the VPN connections works fine when I > JO> > hook the client up directly to my DSL line. btw - it looks like your > JO> > script does not forward anything from one of my interfaces to the other. > JO> > JO> yeah--precisely. you seem obsessed with the desire to "port forward" > JO> esp traffic to your VPN client, which is absolutely not necessary. > JO> > JO> look into configuring NAT-T with your VPN client, sometimes called "UDP > JO> Encapsulation" as your VPN server appears unwilling to accept esp > JO> packets that have traversed an intermediate NAT device. > > hmm... how does a packet know it needs to go from my external NIC to my > internal NIC if it comes through ESP? Maybe I am confused here... > > let's leave the VPN client/server out of the picture to simplify. If I > send an ESP packet from somewhere to my external IP address I get the > "protocol 50 unreachable" ICMP response. The underlying problem seems to > be the primary cause of my troubles, no? > > h. Yes, you should be able to get this to work as long as there is only one station behind the NAT gateway using IPSec. NAT traversal is a valid way to go and the only way to go if you have more than one IPSec client using the same public address. I do assume that the NAT gateway is not running IPSec. To use NAT traversal, you would forward the appropriate UDP port (typically 4500 or 500) rather than ip/50. I do not know why your NAT gateway is refusing to pass the IPSec packets. That's why I suggest logging in my previous e-mail is clarifying the DNAT interface does not work. Good luck - John -- John A. Sullivan III Chief Technology Officer Nexus Management +1 207-985-7880 john.sullivan@nexusmgmt.com ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 4:00 ` Helge Weissig 2004-12-02 4:09 ` John A. Sullivan III @ 2004-12-02 4:12 ` Jason Opperisano 2004-12-02 4:53 ` Helge Weissig 1 sibling, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 4:12 UTC (permalink / raw) To: netfilter On Wed, 2004-12-01 at 23:00, Helge Weissig wrote: > hmm... how does a packet know it needs to go from my external NIC to my > internal NIC if it comes through ESP? Maybe I am confused here... state tracking. in a VPN client -> VPN server scenario the esp packets are *always* initiated from the client side: iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -i $INSIDE_IF -p 50 -j ACCEPT iptables -t nat -A POSTROUTING -o $OUTSIDE_IF -j MASQUERADE that's it... > let's leave the VPN client/server out of the picture to simplify. If I > send an ESP packet from somewhere to my external IP address I get the > "protocol 50 unreachable" ICMP response. The underlying problem seems to > be the primary cause of my troubles, no? um--no. i have run pretty much every single VPN client/server combination in existence, and have never even thought of testing it by sending unsolicited IP Protocol 50 packets through a firewall to the VPN client behind it. it's the most flawed troubleshooting technique i've heard in quite some time...save yourself some time and give up on it. to troubleshoot VPN client/server connection problems--use the debug logs on either side. use tcpdump. do both the client and server agree that both Phase 1 and Phase 2 key exchanges complete? is there a routing problem on either side of the tunnel? are packets successfully encrypted and sent from the client? successfully received and decrypted by the server? where do they go from there? do the replies get encrypted and sent back from the server? received and decrypted by the client? debug at each link in the chain--don't poke at the chain from afar. -j -- "Dear Baby, Welcome to Dumpsville. Population: You" --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 4:12 ` Jason Opperisano @ 2004-12-02 4:53 ` Helge Weissig 2004-12-02 5:15 ` John A. Sullivan III 0 siblings, 1 reply; 29+ messages in thread From: Helge Weissig @ 2004-12-02 4:53 UTC (permalink / raw) To: Netfilter Mailing List On Wed, 1 Dec 2004 at 23:12 -0500, Jason Opperisano wrote: JO> On Wed, 2004-12-01 at 23:00, Helge Weissig wrote: JO> > hmm... how does a packet know it needs to go from my external NIC to my JO> > internal NIC if it comes through ESP? Maybe I am confused here... JO> JO> state tracking. in a VPN client -> VPN server scenario the esp packets JO> are *always* initiated from the client side: my tcpdump on the external interface shows me packets coming on ESP from the server every ten seconds. JO> JO> iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT JO> iptables -A FORWARD -i $INSIDE_IF -p 50 -j ACCEPT JO> JO> iptables -t nat -A POSTROUTING -o $OUTSIDE_IF -j MASQUERADE JO> JO> that's it... JO> JO> > let's leave the VPN client/server out of the picture to simplify. If I JO> > send an ESP packet from somewhere to my external IP address I get the JO> > "protocol 50 unreachable" ICMP response. The underlying problem seems to JO> > be the primary cause of my troubles, no? JO> JO> um--no. i have run pretty much every single VPN client/server JO> combination in existence, and have never even thought of testing it by JO> sending unsolicited IP Protocol 50 packets through a firewall to the VPN JO> client behind it. it's the most flawed troubleshooting technique i've JO> heard in quite some time...save yourself some time and give up on it. can you be more specific about why you would not expect ESP forwarding to work without an IPsec tunnel in place? I am really trying to understand this since most suggestions (including the ipchains rules in the netfilter documentation) include some FORWARD rules for ip/50. JO> to troubleshoot VPN client/server connection problems--use the debug JO> logs on either side. use tcpdump. do both the client and server agree JO> that both Phase 1 and Phase 2 key exchanges complete? is there a JO> routing problem on either side of the tunnel? are packets successfully JO> encrypted and sent from the client? successfully received and decrypted JO> by the server? where do they go from there? do the replies get JO> encrypted and sent back from the server? received and decrypted by the JO> client? JO> JO> debug at each link in the chain--don't poke at the chain from afar. the server and client think that the tunnel is established. I changed my iptables script to the following now to get some logging information, but I think I may need help with it: $IPTABLES -P INPUT ACCEPT $IPTABLES -F INPUT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -F OUTPUT $IPTABLES -P FORWARD DROP $IPTABLES -F FORWARD $IPTABLES -t nat -F $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p 50 -j LOG --log-level info \ --log-prefix 'esp fwd: ' $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p 50 -j ACCEPT $IPTABLES -A PREROUTING -t nat -p 50 -i $EXTIF -j LOG --log-level info \ --log-prefix 'esp route: ' $IPTABLES -A PREROUTING -t nat -p 50 -i $EXTIF -j DNAT \ --to-destination $VPN_CLIENT $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \ --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT $IPTABLES -A FORWARD -j LOG --log-level info --log-prefix 'dropped: ' $IPTABLES -A FORWARD -j DROP $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j LOG --log-level info \ --log-prefix 'masq: ' $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE Basically, I only ever see log entries from the postrouting chain. I also do not see ESP packets going from INTIF to EXTIF contrary to what I thought. So with the VPN "up" (how do I check for encryption for example) and packets coming in from the server, they don't get to INTIF. Pinging a host on VPN shows ESP packets getting to INTIF but no further. If I ping the server itself from the VPN client, i.e. not through the tunnel, all three interfaces report outgoing and incoming traffic. thanks for your input so far. h. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 4:53 ` Helge Weissig @ 2004-12-02 5:15 ` John A. Sullivan III 2004-12-02 5:44 ` Helge Weissig 0 siblings, 1 reply; 29+ messages in thread From: John A. Sullivan III @ 2004-12-02 5:15 UTC (permalink / raw) To: Helge Weissig; +Cc: Netfilter Mailing List On Wed, 2004-12-01 at 23:53, Helge Weissig wrote: > On Wed, 1 Dec 2004 at 23:12 -0500, Jason Opperisano wrote: <snip> > JO> state tracking. in a VPN client -> VPN server scenario the esp packets > JO> are *always* initiated from the client side: I don't believe that is true. The tunnel is always initiated from the client side but the traffic in the tunnel can be initiated from the remote side. > <snip> > JO> > let's leave the VPN client/server out of the picture to simplify. If I > JO> > send an ESP packet from somewhere to my external IP address I get the > JO> > "protocol 50 unreachable" ICMP response. The underlying problem seems to > JO> > be the primary cause of my troubles, no? > JO> > JO> um--no. i have run pretty much every single VPN client/server > JO> combination in existence, and have never even thought of testing it by > JO> sending unsolicited IP Protocol 50 packets through a firewall to the VPN > JO> client behind it. it's the most flawed troubleshooting technique i've > JO> heard in quite some time...save yourself some time and give up on it. Why? Helge's methodology is simplifying matters. He's not testing end to end connectivity. He's testing only one small part, viz., will the NAT gateway properly forward the packet. It doesn't matter if the client won't accept it at this stage of testing. > > can you be more specific about why you would not expect ESP forwarding to > work without an IPsec tunnel in place? I am really trying to understand > this since most suggestions (including the ipchains rules in the netfilter > documentation) include some FORWARD rules for ip/50. It should work. It won't be a tunnel but you should see the esp packet pass through the gateway. > <snip> > I changed my iptables script to the following now to get some logging > information, but I think I may need help with it: > > $IPTABLES -P INPUT ACCEPT > $IPTABLES -F INPUT > $IPTABLES -P OUTPUT ACCEPT > $IPTABLES -F OUTPUT > $IPTABLES -P FORWARD DROP > $IPTABLES -F FORWARD > $IPTABLES -t nat -F > > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p 50 -j LOG --log-level info \ > --log-prefix 'esp fwd: ' > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p 50 -j ACCEPT > $IPTABLES -A PREROUTING -t nat -p 50 -i $EXTIF -j LOG --log-level info \ > --log-prefix 'esp route: ' > $IPTABLES -A PREROUTING -t nat -p 50 -i $EXTIF -j DNAT \ > --to-destination $VPN_CLIENT > > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \ > --state ESTABLISHED,RELATED -j ACCEPT > $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT > $IPTABLES -A FORWARD -j LOG --log-level info --log-prefix 'dropped: ' > $IPTABLES -A FORWARD -j DROP > > $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j LOG --log-level info \ > --log-prefix 'masq: ' > $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE > > Basically, I only ever see log entries from the postrouting chain. I also > do not see ESP packets going from INTIF to EXTIF contrary to what I > thought. So with the VPN "up" (how do I check for encryption for example) > and packets coming in from the server, they don't get to INTIF. Pinging a > host on VPN shows ESP packets getting to INTIF but no further. If I ping > the server itself from the VPN client, i.e. not through the tunnel, all > three interfaces report outgoing and incoming traffic. <snip> Interesting. You've showed us what you think you have. Would you kindly show us what you do have. Do a iptables -v -n -t nat -L iptables -v -n -L FORWARD iptables -v -n -L INPUT If I'm following this correctly, the esp packets should hit your NAT rule and have the destination changed. It should then hit the routing table which will determine that the packet is not local and send it to the FORWARD chain. If you are not logging packets on the FORWARD chain, perhaps the match is wrong. Try a generic log rule for all packets and see what the packets look like on the FORWARD chain. Do they match the rules dumped in the above list? - John -- John A. Sullivan III Chief Technology Officer Nexus Management +1 207-985-7880 john.sullivan@nexusmgmt.com --- If you are interested in helping to develop a GPL enterprise class VPN/Firewall/Security device management console, please visit http://iscs.sourceforge.net ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 5:15 ` John A. Sullivan III @ 2004-12-02 5:44 ` Helge Weissig 2004-12-02 15:14 ` Jason Opperisano 0 siblings, 1 reply; 29+ messages in thread From: Helge Weissig @ 2004-12-02 5:44 UTC (permalink / raw) To: Netfilter Mailing List On Thu, 2 Dec 2004 at 00:15 -0500, John A. Sullivan III wrote: [snip] JASI> Interesting. You've showed us what you think you have. Would you JASI> kindly show us what you do have. JASI> Do a JASI> iptables -v -n -t nat -L JASI> iptables -v -n -L FORWARD JASI> iptables -v -n -L INPUT JASI> JASI> If I'm following this correctly, the esp packets should hit your NAT JASI> rule and have the destination changed. It should then hit the routing JASI> table which will determine that the packet is not local and send it to JASI> the FORWARD chain. If you are not logging packets on the FORWARD chain, JASI> perhaps the match is wrong. Try a generic log rule for all packets and JASI> see what the packets look like on the FORWARD chain. Do they match the JASI> rules dumped in the above list? - John ok... I now have: [helgew@gollum ~]# iptables -v -n -t nat -L Chain PREROUTING (policy ACCEPT 1380 packets, 95540 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `all preroute: ' 0 0 LOG esp -- eth0 * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `esp route: ' 0 0 DNAT esp -- eth0 * 0.0.0.0/0 0.0.0.0/0 to:10.0.0.200 Chain POSTROUTING (policy ACCEPT 586 packets, 45154 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all -- * eth0 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `masq: ' 0 0 MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 1207 packets, 93374 bytes) pkts bytes target prot opt in out source destination [helgew@gollum ~]# iptables -v -n -L FORWARD Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `all fwd: ' 0 0 LOG esp -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `esp fwd: ' 0 0 ACCEPT esp -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT all -- eth1 eth0 0.0.0.0/0 0.0.0.0/0 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `dropped: ' 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 [helgew@gollum ~]# iptables -v -n -L INPUT Chain INPUT (policy ACCEPT 10 packets, 1176 bytes) pkts bytes target prot opt in out source destination [helgew@gollum ~]# and the log shows: VPN tunnel establishment: Dec 1 21:34:10 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=104 TOS=0x00 PREC=0x00 TTL=64 ID=8317 PROTO=UDP SPT=500 DPT=500 LEN=84 Dec 1 21:34:10 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=104 TOS=0x00 PREC=0x00 TTL=63 ID=8317 PROTO=UDP SPT=500 DPT=500 LEN=84 Dec 1 21:34:10 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=104 TOS=0x00 PREC=0x00 TTL=63 ID=8317 PROTO=UDP SPT=500 DPT=500 LEN=84 Dec 1 21:34:16 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=274 TOS=0x00 PREC=0x00 TTL=63 ID=8322 PROTO=UDP SPT=500 DPT=500 LEN=254 Dec 1 21:34:16 gollum kernel: all fwd: IN=eth0 OUT=eth1 SRC=(VPN SERVER IP) DST=10.0.0.200 LEN=356 TOS=0x00 PREC=0x00 TTL=49 ID=19301 PROTO=UDP SPT=500 DPT=500 LEN=336 Dec 1 21:34:17 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=80 TOS=0x00 PREC=0x00 TTL=63 ID=8328 PROTO=UDP SPT=500 DPT=500 LEN=60 Dec 1 21:34:18 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=112 TOS=0x00 PREC=0x00 TTL=63 ID=8332 PROTO=UDP SPT=500 DPT=500 LEN=92 Dec 1 21:34:18 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=256 TOS=0x00 PREC=0x00 TTL=63 ID=8335 PROTO=UDP SPT=500 DPT=500 LEN=236 Dec 1 21:34:18 gollum kernel: all fwd: IN=eth0 OUT=eth1 SRC=(VPN SERVER IP) DST=10.0.0.200 LEN=192 TOS=0x00 PREC=0x00 TTL=49 ID=19304 PROTO=UDP SPT=500 DPT=500 LEN=172 Dec 1 21:34:19 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=88 TOS=0x00 PREC=0x00 TTL=63 ID=8341 PROTO=UDP SPT=500 DPT=500 LEN=68 Dec 1 21:34:19 gollum kernel: all fwd: IN=eth0 OUT=eth1 SRC=(VPN SERVER IP) DST=10.0.0.200 LEN=104 TOS=0x00 PREC=0x00 TTL=49 ID=19305 PROTO=UDP SPT=500 DPT=500 LEN=84 ping of VPN host: Dec 1 21:38:37 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=8977 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:37 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=63 ID=8977 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:37 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=63 ID=8977 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:38 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=8981 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:38 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=63 ID=8981 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:38 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=63 ID=8981 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:39 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=8986 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:39 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=63 ID=8986 PROTO=ESP SPI=0x2e9dc0d2 Dec 1 21:38:39 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=63 ID=8986 PROTO=ESP SPI=0x2e9dc0d2 ping of VPN server: Dec 1 21:42:28 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=9650 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=0 Dec 1 21:42:28 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9650 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=0 Dec 1 21:42:28 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9650 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=0 Dec 1 21:42:29 gollum kernel: all fwd: IN=eth0 OUT=eth1 SRC=(VPN SERVER IP) DST=10.0.0.200 LEN=84 TOS=0x00 PREC=0x00 TTL=49 ID=19796 PROTO=ICMP TYPE=0 CODE=0 ID=6817 SEQ=0 Dec 1 21:42:29 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=9656 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=1 Dec 1 21:42:29 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9656 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=1 Dec 1 21:42:29 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9656 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=1 Dec 1 21:42:30 gollum kernel: all fwd: IN=eth0 OUT=eth1 SRC=(VPN SERVER IP) DST=10.0.0.200 LEN=84 TOS=0x00 PREC=0x00 TTL=49 ID=19797 PROTO=ICMP TYPE=0 CODE=0 ID=6817 SEQ=1 Dec 1 21:42:30 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=9662 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=2 Dec 1 21:42:30 gollum kernel: all fwd: IN=eth1 OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9662 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=2 Dec 1 21:42:30 gollum kernel: masq: IN= OUT=eth0 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=9662 PROTO=ICMP TYPE=8 CODE=0 ID=6817 SEQ=2 Dec 1 21:42:31 gollum kernel: all fwd: IN=eth0 OUT=eth1 SRC=(VPN SERVER IP) DST=10.0.0.200 LEN=84 TOS=0x00 PREC=0x00 TTL=49 ID=19798 PROTO=ICMP TYPE=0 CODE=0 ID=6817 SEQ=2 otherwise... silence :( I don't see ping replies through the tunnel or the server side initiated packets h. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 5:44 ` Helge Weissig @ 2004-12-02 15:14 ` Jason Opperisano 2004-12-02 15:13 ` Helge Weissig 0 siblings, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 15:14 UTC (permalink / raw) To: Netfilter Mailing List On Wed, Dec 01, 2004 at 09:44:13PM -0800, Helge Weissig wrote: > ok... I now have: <snip> do you control the VPN server? it looks like the packets from your client are getting dropped at that end either pre or post decrypting (most likely post). what is the VPN server? -j -- "English - Who needs that? I'm never going to England!" --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 15:14 ` Jason Opperisano @ 2004-12-02 15:13 ` Helge Weissig 2004-12-02 17:25 ` Jason Opperisano 0 siblings, 1 reply; 29+ messages in thread From: Helge Weissig @ 2004-12-02 15:13 UTC (permalink / raw) To: Netfilter Mailing List Jason, my ESP packets do not go from the external interface to the internal one and vice versa. The connection to the VPN server works when I hook up directly with no changes other than the IP of the client. I cannot see how this would be a problem with the VPN network at all. h. On Dec 2, 2004, at 7:14 AM, Jason Opperisano wrote: > On Wed, Dec 01, 2004 at 09:44:13PM -0800, Helge Weissig wrote: >> ok... I now have: > > <snip> > > do you control the VPN server? it looks like the packets from your > client are getting dropped at that end either pre or post decrypting > (most likely post). what is the VPN server? > > -j > > -- > "English - Who needs that? I'm never going to England!" > --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 15:13 ` Helge Weissig @ 2004-12-02 17:25 ` Jason Opperisano 2004-12-02 18:22 ` Helge Weissig 0 siblings, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 17:25 UTC (permalink / raw) To: Netfilter Mailing List On Thu, Dec 02, 2004 at 07:13:59AM -0800, Helge Weissig wrote: > Jason, > > my ESP packets do not go from the external interface to the internal > one and vice versa. The connection to the VPN server works when I hook > up directly with no changes other than the IP of the client. I cannot > see how this would be a problem with the VPN network at all. > > h. looking at your logs--all your ESP packets are from client->server. you don't have a single ESP packet from server->client. so when you say, "my ESP packets do not go from the external interface..." you are ignoring the fact that there are no ESP packets ever getting to your external interface. which brings me back to what i said several replies ago: your VPN server is discarding the ESP packets from your client as a result of the mangling of your intermediate NAT device. either make the VPN server more tolerant, or use NAT-T on your client. -j -- "Ah, good ol' trustworthy beer. My love for you will never die." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 17:25 ` Jason Opperisano @ 2004-12-02 18:22 ` Helge Weissig 2004-12-02 18:54 ` John A. Sullivan III 2004-12-02 20:11 ` Jason Opperisano 0 siblings, 2 replies; 29+ messages in thread From: Helge Weissig @ 2004-12-02 18:22 UTC (permalink / raw) To: Netfilter Mailing List The iptable logs are not complete and as I mentioned, I may need help with setting that up. I can see the packets coming from the server with tcpdump as I showed in my original post but then an immediate reply is sent back and nothing goes through to the internal interface. The same thing happens when I use nmap to scan ip protocols. Conversely, my internal ESP traffic ends at the internal interface of my firewall. It never reaches the external interface or the outside. TCP traffic works fine as you can see from the ping logs from the internal client. Could this indicate that there is a problem before anything gets to iptables? h. On Thu, 2 Dec 2004 at 12:25 -0500, netfilter-bounces@lists.netfilter.org wrote: JO> On Thu, Dec 02, 2004 at 07:13:59AM -0800, Helge Weissig wrote: JO> > Jason, JO> > JO> > my ESP packets do not go from the external interface to the internal JO> > one and vice versa. The connection to the VPN server works when I hook JO> > up directly with no changes other than the IP of the client. I cannot JO> > see how this would be a problem with the VPN network at all. JO> > JO> > h. JO> JO> looking at your logs--all your ESP packets are from client->server. JO> you don't have a single ESP packet from server->client. so when you JO> say, "my ESP packets do not go from the external interface..." you are JO> ignoring the fact that there are no ESP packets ever getting to your JO> external interface. JO> JO> which brings me back to what i said several replies ago: JO> JO> your VPN server is discarding the ESP packets from your client as a JO> result of the mangling of your intermediate NAT device. JO> JO> either make the VPN server more tolerant, or use NAT-T on your client. JO> JO> -j JO> JO> -- JO> "Ah, good ol' trustworthy beer. My love for you will never die." JO> --The Simpsons JO> ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 18:22 ` Helge Weissig @ 2004-12-02 18:54 ` John A. Sullivan III 2004-12-02 20:11 ` Jason Opperisano 1 sibling, 0 replies; 29+ messages in thread From: John A. Sullivan III @ 2004-12-02 18:54 UTC (permalink / raw) To: Helge Weissig; +Cc: Netfilter Mailing List I'm afraid I'm up to my eyeballs today so I won't be able to help very much but let me see if I understand what we have found thus far. Am I correct to assume that there are actually four devices involved and they lay out like this: VPN_HOST | | VPN_SERVER | | INTERNET | | NAT_GATEWAY | | VPN_CLIENT It appears that we do successfully establish a tunnel between VPN_CLIENT and VPN_SERVER. When we ping from VPN_CLIENT to VPN_HOST, we see the esp packets pass through PREROUTING, FORWARD and POSTROUTING. I'd imagine we do but I would confirm that we see them on eth0. I believe your troubleshooting methodology of examining inbound esp traffic apart from the tunnel is valid but, like Jason, my instinct shows a different troubleshooting path. If you have control of the VPN_SERVER, I would troubleshoot the remote side. If the packets are leaving NAT_GATEWAY eth0, are they arriving at VPN_SERVER eth0 (assuming eth0 is the public facing interface)? If they are, do we see the ping packets going out VPN_SERVER eth1? If we do, do we see the reply ping packets on VPN_SERVER eth1? If we do, do we see the reply esp packets on VPN_SERVER eth0? If we do, do we see the reply esp packets on NAT_GATEWAY eth0? If we do, then we start following the packet's progress through netfilter on NAT_GATEWAY. I would suggest a general log rule in front of the FORWARD rule for esp to see if any esp packets are making it to the FORWARD chain. If so, do they match the match criteria for the ALLOW rule, e.g., the interfaces? On Thu, 2004-12-02 at 13:22, Helge Weissig wrote: > The iptable logs are not complete and as I mentioned, I may need help with > setting that up. I can see the packets coming from the server with tcpdump > as I showed in my original post but then an immediate reply is sent back > and nothing goes through to the internal interface. The same thing happens > when I use nmap to scan ip protocols. Conversely, my internal ESP traffic > ends at the internal interface of my firewall. It never reaches the > external interface or the outside. TCP traffic works fine as you can see > from the ping logs from the internal client. Could this indicate that > there is a problem before anything gets to iptables? > > h. > > On Thu, 2 Dec 2004 at 12:25 -0500, netfilter-bounces@lists.netfilter.org wrote: > > JO> On Thu, Dec 02, 2004 at 07:13:59AM -0800, Helge Weissig wrote: > JO> > Jason, > JO> > > JO> > my ESP packets do not go from the external interface to the internal > JO> > one and vice versa. The connection to the VPN server works when I hook > JO> > up directly with no changes other than the IP of the client. I cannot > JO> > see how this would be a problem with the VPN network at all. > JO> > > JO> > h. > JO> > JO> looking at your logs--all your ESP packets are from client->server. > JO> you don't have a single ESP packet from server->client. so when you > JO> say, "my ESP packets do not go from the external interface..." you are > JO> ignoring the fact that there are no ESP packets ever getting to your > JO> external interface. > JO> > JO> which brings me back to what i said several replies ago: > JO> > JO> your VPN server is discarding the ESP packets from your client as a > JO> result of the mangling of your intermediate NAT device. > JO> > JO> either make the VPN server more tolerant, or use NAT-T on your client. > JO> > JO> -j > JO> > JO> -- > JO> "Ah, good ol' trustworthy beer. My love for you will never die." > JO> --The Simpsons > JO> -- John A. Sullivan III Chief Technology Officer Nexus Management +1 207-985-7880 john.sullivan@nexusmgmt.com --- If you are interested in helping to develop a GPL enterprise class VPN/Firewall/Security device management console, please visit http://iscs.sourceforge.net ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 18:22 ` Helge Weissig 2004-12-02 18:54 ` John A. Sullivan III @ 2004-12-02 20:11 ` Jason Opperisano 2004-12-02 19:26 ` Helge Weissig 1 sibling, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 20:11 UTC (permalink / raw) To: Netfilter Mailing List On Thu, Dec 02, 2004 at 10:22:27AM -0800, Helge Weissig wrote: > The iptable logs are not complete if you're not providing all the details, i'm not sure how we're supposed to be able to help. the information i was going on was: Chain PREROUTING (policy ACCEPT 1380 packets, 95540 bytes) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 6 prefix `all preroute: ' and the log entries: Dec 1 21:38:37 gollum kernel: all preroute: IN=eth1 OUT= MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=8977 PROTO=ESP SPI=0x2e9dc0d2 your log rule in PREROUTING of the nat table should catch every single packet, before any filtering (or even routing) takes place (unless you have filter rules in mangle). the fact that every log entry you provided (like the above) shows ESP from client->server means: 1) there are zero ESP packets coming from server->client 2) you removed those log entries from your post 3) packets from server->client disappear somewhere between the pcap layer and the netfilter PREROUTING hook are you saying it's #2? > and as I mentioned, I may need help with > setting that up. I can see the packets coming from the server with tcpdump > as I showed in my original post but then an immediate reply is sent back > and nothing goes through to the internal interface. if you can see ESP packets hitting your external interface from the VPN server with tcpdump, but a log rule in PREROUTING of the nat table doesn't see them--you have something horribly, horribly wrong with your firewall machine. > The same thing happens > when I use nmap to scan ip protocols. Conversely, my internal ESP traffic > ends at the internal interface of my firewall. It never reaches the > external interface or the outside. TCP traffic works fine as you can see > from the ping logs from the internal client. Could this indicate that > there is a problem before anything gets to iptables? yes. if you use these rules: iptables -t nat -A PREROUTING -p 50 -j LOG \ --log-prefix "PREROUTE ESP: " iptables -A FORWARD -p 50 -j LOG --log-prefix "FWD ESP: " iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE you should get logs in both directions (client->server and server->client). if not...well, let's assume for now that you will... it would also greatly help if you made sure to post all the logs generated by the above, so as not to mislead us. -j -- "Ah, beer, my one weakness. My Achilles heel, if you will." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 20:11 ` Jason Opperisano @ 2004-12-02 19:26 ` Helge Weissig 2004-12-02 20:56 ` Jason Opperisano 2004-12-03 6:35 ` Philip Craig 0 siblings, 2 replies; 29+ messages in thread From: Helge Weissig @ 2004-12-02 19:26 UTC (permalink / raw) To: Netfilter Mailing List I mean with "incomplete" that the tcpdump traffic I see does not show up in the logs. I used your rules at the end of your reply and see the same thing: ESP from VPN_SERVER hits $EXTIF, triggers the "protocol 50 unreachable" icmp response and no log entry ever shows up in the kernel log from the iptables log rule. I am suspecting that your option 3) is indeed the problem. h. On Thu, 2 Dec 2004 at 15:11 -0500, netfilter-bounces@lists.netfilter.org wrote: JO> On Thu, Dec 02, 2004 at 10:22:27AM -0800, Helge Weissig wrote: JO> > The iptable logs are not complete JO> JO> if you're not providing all the details, i'm not sure how we're supposed JO> to be able to help. the information i was going on was: JO> JO> Chain PREROUTING (policy ACCEPT 1380 packets, 95540 bytes) JO> pkts bytes target prot opt in out source JO> destination JO> 0 0 LOG all -- * * 0.0.0.0/0 JO> 0.0.0.0/0 LOG flags 0 level 6 prefix `all preroute: ' JO> JO> and the log entries: JO> JO> Dec 1 21:38:37 gollum kernel: all preroute: IN=eth1 OUT= JO> MAC=00:c0:4f:22:05:03:00:30:65:1f:ed:0a:08:00 SRC=10.0.0.200 DST=(VPN JO> SERVER IP) LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=8977 PROTO=ESP JO> SPI=0x2e9dc0d2 JO> JO> your log rule in PREROUTING of the nat table should catch every single JO> packet, before any filtering (or even routing) takes place (unless you JO> have filter rules in mangle). the fact that every log entry you provided JO> (like the above) shows ESP from client->server means: JO> JO> 1) there are zero ESP packets coming from server->client JO> 2) you removed those log entries from your post JO> 3) packets from server->client disappear somewhere between the pcap JO> layer and the netfilter PREROUTING hook JO> JO> are you saying it's #2? JO> JO> > and as I mentioned, I may need help with JO> > setting that up. I can see the packets coming from the server with tcpdump JO> > as I showed in my original post but then an immediate reply is sent back JO> > and nothing goes through to the internal interface. JO> JO> if you can see ESP packets hitting your external interface from the JO> VPN server with tcpdump, but a log rule in PREROUTING of the nat table JO> doesn't see them--you have something horribly, horribly wrong with your JO> firewall machine. JO> JO> > The same thing happens JO> > when I use nmap to scan ip protocols. Conversely, my internal ESP traffic JO> > ends at the internal interface of my firewall. It never reaches the JO> > external interface or the outside. TCP traffic works fine as you can see JO> > from the ping logs from the internal client. Could this indicate that JO> > there is a problem before anything gets to iptables? JO> JO> yes. JO> JO> if you use these rules: JO> JO> iptables -t nat -A PREROUTING -p 50 -j LOG \ JO> --log-prefix "PREROUTE ESP: " JO> JO> iptables -A FORWARD -p 50 -j LOG --log-prefix "FWD ESP: " JO> JO> iptables -t nat -A POSTROUTING -o $EXT_IF -j MASQUERADE JO> JO> you should get logs in both directions (client->server and JO> server->client). if not...well, let's assume for now that you will... JO> JO> it would also greatly help if you made sure to post all the logs JO> generated by the above, so as not to mislead us. JO> JO> -j JO> JO> -- JO> "Ah, beer, my one weakness. My Achilles heel, if you will." JO> --The Simpsons JO> ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 19:26 ` Helge Weissig @ 2004-12-02 20:56 ` Jason Opperisano 2004-12-02 20:12 ` Helge Weissig 2004-12-03 6:35 ` Philip Craig 1 sibling, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 20:56 UTC (permalink / raw) To: netfilter On Thu, Dec 02, 2004 at 11:26:22AM -0800, Helge Weissig wrote: > I mean with "incomplete" that the tcpdump traffic I see does not show up > in the logs. I used your rules at the end of your reply and see the same > thing: ESP from VPN_SERVER hits $EXTIF, triggers the "protocol 50 > unreachable" icmp response and no log entry ever shows up in the kernel > log from the iptables log rule. I am suspecting that your option 3) is > indeed the problem. > > h. what kernel are you running on this firewall [*]? the only plausible explanation at this point (and i'm not even sure that this is possible) is that you're running an IPsec-enabled kernel that has SPD entries in it that is scarfing up the ESP packets prior to the PREROUTING netfilter hooks. i'm not sure that the last part is even possible though, as i was under the impression that ESP packets fully travel through PREROUTING and INPUT before they get processed by the kernel IPsec code... [*] if the answer is 2.6, the output of "setkey -aPD" should be: No SPD entries. -j -- "I hope I didn't brain my damage." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 20:56 ` Jason Opperisano @ 2004-12-02 20:12 ` Helge Weissig 2004-12-02 21:30 ` Jason Opperisano 0 siblings, 1 reply; 29+ messages in thread From: Helge Weissig @ 2004-12-02 20:12 UTC (permalink / raw) To: Netfilter Mailing List My kernel is 2.4.18-24.8.0 - h. On Thu, 2 Dec 2004 at 15:56 -0500, netfilter-bounces@lists.netfilter.org wrote: JO> On Thu, Dec 02, 2004 at 11:26:22AM -0800, Helge Weissig wrote: JO> > I mean with "incomplete" that the tcpdump traffic I see does not show up JO> > in the logs. I used your rules at the end of your reply and see the same JO> > thing: ESP from VPN_SERVER hits $EXTIF, triggers the "protocol 50 JO> > unreachable" icmp response and no log entry ever shows up in the kernel JO> > log from the iptables log rule. I am suspecting that your option 3) is JO> > indeed the problem. JO> > JO> > h. JO> JO> what kernel are you running on this firewall [*]? the only plausible JO> explanation at this point (and i'm not even sure that this is possible) JO> is that you're running an IPsec-enabled kernel that has SPD entries in JO> it that is scarfing up the ESP packets prior to the PREROUTING netfilter JO> hooks. i'm not sure that the last part is even possible though, as i JO> was under the impression that ESP packets fully travel through PREROUTING JO> and INPUT before they get processed by the kernel IPsec code... JO> JO> [*] if the answer is 2.6, the output of "setkey -aPD" should be: JO> No SPD entries. JO> JO> -j JO> JO> -- JO> "I hope I didn't brain my damage." JO> --The Simpsons JO> ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 20:12 ` Helge Weissig @ 2004-12-02 21:30 ` Jason Opperisano 0 siblings, 0 replies; 29+ messages in thread From: Jason Opperisano @ 2004-12-02 21:30 UTC (permalink / raw) To: Netfilter Mailing List On Thu, Dec 02, 2004 at 12:12:25PM -0800, Helge Weissig wrote: > My kernel is 2.4.18-24.8.0 - h. as much as it pains me to say this ('cause i sorta dig figuring this stuff out): you've stumped me. -j -- "Weaseling out of things is important to learn. It's what separates us from the animals...except the weasel." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 19:26 ` Helge Weissig 2004-12-02 20:56 ` Jason Opperisano @ 2004-12-03 6:35 ` Philip Craig 2004-12-03 17:11 ` Helge Weissig 1 sibling, 1 reply; 29+ messages in thread From: Philip Craig @ 2004-12-03 6:35 UTC (permalink / raw) To: Helge Weissig; +Cc: Netfilter Mailing List Helge Weissig wrote: > I mean with "incomplete" that the tcpdump traffic I see does not show up > in the logs. I used your rules at the end of your reply and see the same > thing: ESP from VPN_SERVER hits $EXTIF, triggers the "protocol 50 > unreachable" icmp response and no log entry ever shows up in the kernel > log from the iptables log rule. I am suspecting that your option 3) is > indeed the problem. > > h. It is possible that a conntrack already exists, or the packet can't be conntracked, so the packet doesn't pass through nat PREROUTING. Try putting the log rule in the mangle PREROUTING chain. If they do match a log rule here, check if they are invalid with -m conntrack --ctstate INVALID. Also check if there are any esp conntracks in /proc/net/ip_conntrack -- Philip Craig - SnapGear, A CyberGuard Company - http://www.SnapGear.com ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-03 6:35 ` Philip Craig @ 2004-12-03 17:11 ` Helge Weissig 2004-12-04 2:20 ` Alistair Tonner 0 siblings, 1 reply; 29+ messages in thread From: Helge Weissig @ 2004-12-03 17:11 UTC (permalink / raw) To: Netfilter Mailing List ahhh... finally I see something... but what does it mean??? added the following two log rules: $IPTABLES -A PREROUTING -t mangle -j LOG --log-level info --log-prefix 'all mangle preroute: ' $IPTABLES -A PREROUTING -t mangle -m conntrack --ctstate INVALID -j LOG --log-level info --log-prefix 'contrack mangle preroute: ' the second generates the following error: iptables v1.2.6a: Couldn't load match `conntrack':/lib/iptables/libipt_conntrack.so: cannot open shared object file: No such file or directory the ESP's however now show up in the log (these are nmap generated): Dec 3 09:07:23 gollum kernel: all mangle preroute: IN=eth0 OUT= MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 SRC=vpn.server.ip DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=56785 PROTO=ESP INCOMPLETE [0 bytes] Dec 3 09:07:23 gollum kernel: all mangle preroute: IN=eth0 OUT= MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 SRC=vpn.server.ip DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=7732 PROTO=ESP INCOMPLETE [0 bytes] h. On Fri, 3 Dec 2004 at 16:35 +1000, Philip Craig wrote: PC> Helge Weissig wrote: PC> > I mean with "incomplete" that the tcpdump traffic I see does not show up PC> > in the logs. I used your rules at the end of your reply and see the same PC> > thing: ESP from VPN_SERVER hits $EXTIF, triggers the "protocol 50 PC> > unreachable" icmp response and no log entry ever shows up in the kernel PC> > log from the iptables log rule. I am suspecting that your option 3) is PC> > indeed the problem. PC> > PC> > h. PC> PC> It is possible that a conntrack already exists, or the packet can't be PC> conntracked, so the packet doesn't pass through nat PREROUTING. PC> PC> Try putting the log rule in the mangle PREROUTING chain. PC> If they do match a log rule here, check if they are invalid PC> with -m conntrack --ctstate INVALID. PC> PC> Also check if there are any esp conntracks in /proc/net/ip_conntrack PC> PC> ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-03 17:11 ` Helge Weissig @ 2004-12-04 2:20 ` Alistair Tonner 2004-12-04 2:35 ` Jason Opperisano 0 siblings, 1 reply; 29+ messages in thread From: Alistair Tonner @ 2004-12-04 2:20 UTC (permalink / raw) To: netfilter On December 3, 2004 12:11 pm, Helge Weissig wrote: > ahhh... finally I see something... but what does it mean??? > > added the following two log rules: > $IPTABLES -A PREROUTING -t mangle -j LOG --log-level info --log-prefix 'all > mangle preroute: ' $IPTABLES -A PREROUTING -t mangle -m conntrack --ctstate > INVALID -j LOG --log-level info --log-prefix 'contrack mangle preroute: ' > > the second generates the following error: > iptables v1.2.6a: Couldn't load match > `conntrack':/lib/iptables/libipt_conntrack.so: cannot open shared object > file: No such file or directory The above error indicates you did not build the conntrack match module and related iptables code. > > the ESP's however now show up in the log (these are nmap generated): > Dec 3 09:07:23 gollum kernel: all mangle preroute: IN=eth0 OUT= > MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 SRC=vpn.server.ip > DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=56785 PROTO=ESP > INCOMPLETE [0 bytes] > Dec 3 09:07:23 gollum kernel: all mangle preroute: > IN=eth0 OUT= MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 > SRC=vpn.server.ip DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=7732 > PROTO=ESP INCOMPLETE [0 bytes] > It would be nice to have the other packet(s) that went out to initiate this connection. But it doesn't look good to me -- I *think* that ipt_LOG.c is saying that the packet structure for the ESP packet is incomplete. eh = skb_header_pointer(skb, iphoff+ih->ihl*4, sizeof(_esph), &_esph); if (eh == NULL) { printk("INCOMPLETE [%u bytes] ", skb->len - iphoff - ih->ihl*4); break; Not sure how the packet is arriving in the LOG routine without the relevant data. Alistair Tonner RSO HP Unix admin. > h. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-04 2:20 ` Alistair Tonner @ 2004-12-04 2:35 ` Jason Opperisano 2004-12-04 3:03 ` Helge Weissig 0 siblings, 1 reply; 29+ messages in thread From: Jason Opperisano @ 2004-12-04 2:35 UTC (permalink / raw) To: netfilter On Fri, 2004-12-03 at 21:20, Alistair Tonner wrote: > On December 3, 2004 12:11 pm, Helge Weissig wrote: > > ahhh... finally I see something... but what does it mean??? > > > > added the following two log rules: > > $IPTABLES -A PREROUTING -t mangle -j LOG --log-level info --log-prefix 'all > > mangle preroute: ' $IPTABLES -A PREROUTING -t mangle -m conntrack --ctstate > > INVALID -j LOG --log-level info --log-prefix 'contrack mangle preroute: ' > > > > the second generates the following error: > > iptables v1.2.6a: Couldn't load match > > `conntrack':/lib/iptables/libipt_conntrack.so: cannot open shared object > > file: No such file or directory > > The above error indicates you did not build the conntrack match module and > related iptables code. > > > > > the ESP's however now show up in the log (these are nmap generated): > > > Dec 3 09:07:23 gollum kernel: all mangle preroute: IN=eth0 OUT= > > MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 SRC=vpn.server.ip > > DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=56785 PROTO=ESP > > INCOMPLETE [0 bytes] > > > Dec 3 09:07:23 gollum kernel: all mangle preroute: > > IN=eth0 OUT= MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 > > SRC=vpn.server.ip DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=7732 > > PROTO=ESP INCOMPLETE [0 bytes] LEN=20 means the IP packet is only 20 bytes--which would lead one to believe that the packet contains only an IP header and no data. which is probably all nmap is generating. not sure what more you would expect from such a test. -j -- "I have thought this through. First, I will send Bart the money to fly home. Then I will murder him." --The Simpsons ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-04 2:35 ` Jason Opperisano @ 2004-12-04 3:03 ` Helge Weissig 0 siblings, 0 replies; 29+ messages in thread From: Helge Weissig @ 2004-12-04 3:03 UTC (permalink / raw) To: Netfilter Mailing List On Fri, 3 Dec 2004 at 21:35 -0500, netfilter-bounces@lists.netfilter.org wrote: JO> > > the ESP's however now show up in the log (these are nmap generated): JO> > JO> > > Dec 3 09:07:23 gollum kernel: all mangle preroute: IN=eth0 OUT= JO> > > MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 SRC=vpn.server.ip JO> > > DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=56785 PROTO=ESP JO> > > INCOMPLETE [0 bytes] JO> > JO> > > Dec 3 09:07:23 gollum kernel: all mangle preroute: JO> > > IN=eth0 OUT= MAC=00:90:27:ca:39:56:00:10:67:00:b4:3e:08:00 JO> > > SRC=vpn.server.ip DST=ext.if.ip LEN=20 TOS=0x00 PREC=0x00 TTL=32 ID=7732 JO> > > PROTO=ESP INCOMPLETE [0 bytes] JO> JO> LEN=20 means the IP packet is only 20 bytes--which would lead one to JO> believe that the packet contains only an IP header and no data. which JO> is probably all nmap is generating. not sure what more you would expect JO> from such a test. would this match the following log rule though? $IPTABLES -A PREROUTING -p esp -t mangle -m state --state INVALID -j LOG I am seeing log entries from that that say "INCOMPLETE" (which would make sense). FWIW, I was aware of the nmap limitation in this case, but could not test it with the VPN connection yet today... stay tuned! h. ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-02 0:29 ` Jason Opperisano 2004-12-02 3:29 ` Helge Weissig @ 2004-12-02 4:03 ` John A. Sullivan III 1 sibling, 0 replies; 29+ messages in thread From: John A. Sullivan III @ 2004-12-02 4:03 UTC (permalink / raw) To: Jason Opperisano; +Cc: Netfilter users list On Wed, 2004-12-01 at 19:29, Jason Opperisano wrote: > On Wed, 2004-12-01 at 17:51, Helge Weissig wrote: > <snip> > > Here is my current iptables configuration > > > > $IPTABLES -P INPUT ACCEPT > > $IPTABLES -F INPUT > > $IPTABLES -P OUTPUT ACCEPT > > $IPTABLES -F OUTPUT > > $IPTABLES -P FORWARD DROP > > $IPTABLES -F FORWARD > > $IPTABLES -t nat -F > > > > echo "Enabling PORTFW Redirection on the external LAN.." > > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p esp -j ACCEPT > > $IPTABLES -A PREROUTING -t nat -d $VPN_SERVER -p esp -j DNAT \ > > --to-destination $VPN_CLIENT > > what on earth is that rule supposed to accomplish? it's says "any esp > packet destined for $VPN_SERVER should be destination translated to > $VPN_CLIENT." > > if this is the firewall in front of $VPN_CLIENT (which it sounds like it > is), you have created (for lack of a better term) a packet reflector. > any esp packet sent from VPN client to VPN server will be spit back at > the VPN client. > > > echo " FWD: Allow all connections OUT and only existing and related > > ones IN" > > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \ > > --state ESTABLISHED,RELATED -j ACCEPT > > $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT > > $IPTABLES -A FORWARD -j LOG > > > > echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" > > $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE > > > > here is the tcpdump info I see on $EXTIF: > > > > 10:23:09.234937 (vpn server ip) > (my ip): ESP(spi=0x00000000,seq=0x0) > > 10:23:09.235055 (my ip) > (vpn server ip): icmp: (my ip) protocol 50 > > unreachable [tos 0xc0] > > > > (these are empty packets sent by nmap but it looks the same for legit > > ones coming from the vpn server ip). FWIW, when the ipsec tunnel is > > established and I try to ping the a host behind the vpn server, I see > > the outgoing packets on all three interfaces, but not response. > > > > thanks for any information or pointers in advance! > > h. > > simplify: > > # start fresh > for t in mangle nat filter; do > iptables -t $t -F > iptables -t $t -X > iptables -t $t -Z > done > for c in INPUT FORWARD OUTPUT; do > iptables -P $c ACCEPT > done > > # hide-nat outbound traffic > iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE > > # ip forwarding > sysctl -w net.ipv4.ip_forward=1 > > try and connect with your VPN client to your VPN server with that > script. if you can't connect--it's more likely an IPSec configuration > detail that your missing. <snip> I don't think this is quite right, Jason. It is possible that the other side of the tunnel will need to initiate traffic once the tunnel is established. Thus, there may be inbound packets on ip/50 that are not associated with any entry in the connection tracking table. Thus he does need the specific port forwarding DNAT rule. I believe you are correct that he does need to qualify the interface, i.e., the DNAT rule should only apply to traffic where -i $EXTIF lest he have the reflector effect. In fact, I'm surprised that he saw the ESP pings going through. I would have thought they would have been reflected. Nonetheless, Helge, you should qualify the interface. See if that helps. If that doesn't work, I would suggest placing log rules at strategic points in the rule set to find out what the packet looks like just before the -p esp -j ACCEPT rule to find out why it doesn't match. I assume this is not the entire rule set, e.g., somewhere I would imagine you change the INPUT and OUTPUT policies to DROP. Is there any chance that one of the variables is set incorrectly, e.g., $VPN_CLIENT or $VPN_SERVER? -- John A. Sullivan III Chief Technology Officer Nexus Management +1 207-985-7880 john.sullivan@nexusmgmt.com --- If you are interested in helping to develop a GPL enterprise class VPN/Firewall/Security device management console, please visit http://iscs.sourceforge.net ^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: protocol 50 unreachable 2004-12-01 22:51 protocol 50 unreachable Helge Weissig 2004-12-01 23:59 ` John A. Sullivan III 2004-12-02 0:29 ` Jason Opperisano @ 2004-12-04 17:07 ` Helge Weissig 2 siblings, 0 replies; 29+ messages in thread From: Helge Weissig @ 2004-12-04 17:07 UTC (permalink / raw) To: Netfilter Mailing List what do you know?? As mysteriously as the problem appeared, it seems to have resolved itself. I am stumped! Thanks to all of you for your input and patience. h. On Dec 1, 2004, at 2:51 PM, Helge Weissig wrote: > Sorry for the cross-post, but this problem is really nagging me. What I > did not put into the post below is the fact that it only occurred > after a > reboot of my linux system due to a short power outage. Here is the > routing > table, if that makes any difference: > > Kernel IP routing table > Destination Gateway Genmask Flags Metric Ref Use Iface > 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 > xx.xx.xx.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 > 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo > 0.0.0.0 xx.xx.xx.1 0.0.0.0 UG 0 0 0 eth0 > > the xx.xx.xx is the first part of my external ip address. > > thanks for any advice or insight! > h. > > > > From: helgew@grajagan.org (Helge Weissig) > Newsgroups: comp.security.firewalls > Subject: protocol 50 unreachable > NNTP-Posting-Host: 63.196.131.66 > Message-ID: <a1a4b233.0411301146.3c342dce@posting.google.com> > > Hi, > > I have been searching for information about this problem high and low > but came up dry. Basically, I am trying to connect to a VPN server via > ipsec from behind a NAT firewall set up on a Linux (kernel 2.4.x) box > with iptables. I have no problem establishing the connection via port > 500 as this is initiated by the client. However, I cannot seem to get > protocol 50 (ESP) to work, independent of whether the ipsec tunnel is > established or not. I have tried every incantation of iptables rules I > could find, to no avail. When I set up tcdump on both interfaces on my > server as well as on the client behind it, a port I have opened for > forwarding responds as expected. If I run 'nmap -sO' from somewhere > outside however, it will report protocol 50 as open although the > external interface reports a 'icmp: xx.xx.xx.xx protocol 50 > unreachable' response and the two other interfaces never see the > traffic. > > Here is my current iptables configuration > > $IPTABLES -P INPUT ACCEPT > $IPTABLES -F INPUT > $IPTABLES -P OUTPUT ACCEPT > $IPTABLES -F OUTPUT > $IPTABLES -P FORWARD DROP > $IPTABLES -F FORWARD > $IPTABLES -t nat -F > > echo "Enabling PORTFW Redirection on the external LAN.." > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p esp -j ACCEPT > $IPTABLES -A PREROUTING -t nat -d $VPN_SERVER -p esp -j DNAT \ > --to-destination $VPN_CLIENT > > echo " FWD: Allow all connections OUT and only existing and related > ones IN" > $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state \ > --state ESTABLISHED,RELATED -j ACCEPT > $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT > $IPTABLES -A FORWARD -j LOG > > echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" > $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE > > here is the tcpdump info I see on $EXTIF: > > 10:23:09.234937 (vpn server ip) > (my ip): ESP(spi=0x00000000,seq=0x0) > 10:23:09.235055 (my ip) > (vpn server ip): icmp: (my ip) protocol 50 > unreachable [tos 0xc0] > > (these are empty packets sent by nmap but it looks the same for legit > ones coming from the vpn server ip). FWIW, when the ipsec tunnel is > established and I try to ping the a host behind the vpn server, I see > the outgoing packets on all three interfaces, but not response. > > thanks for any information or pointers in advance! > h. > ^ permalink raw reply [flat|nested] 29+ messages in thread
end of thread, other threads:[~2004-12-04 17:07 UTC | newest] Thread overview: 29+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-12-01 22:51 protocol 50 unreachable Helge Weissig 2004-12-01 23:59 ` John A. Sullivan III 2004-12-02 0:07 ` Helge Weissig 2004-12-02 0:29 ` Jason Opperisano 2004-12-02 3:29 ` Helge Weissig 2004-12-02 3:46 ` Jason Opperisano 2004-12-02 4:00 ` Helge Weissig 2004-12-02 4:09 ` John A. Sullivan III 2004-12-02 4:12 ` Jason Opperisano 2004-12-02 4:53 ` Helge Weissig 2004-12-02 5:15 ` John A. Sullivan III 2004-12-02 5:44 ` Helge Weissig 2004-12-02 15:14 ` Jason Opperisano 2004-12-02 15:13 ` Helge Weissig 2004-12-02 17:25 ` Jason Opperisano 2004-12-02 18:22 ` Helge Weissig 2004-12-02 18:54 ` John A. Sullivan III 2004-12-02 20:11 ` Jason Opperisano 2004-12-02 19:26 ` Helge Weissig 2004-12-02 20:56 ` Jason Opperisano 2004-12-02 20:12 ` Helge Weissig 2004-12-02 21:30 ` Jason Opperisano 2004-12-03 6:35 ` Philip Craig 2004-12-03 17:11 ` Helge Weissig 2004-12-04 2:20 ` Alistair Tonner 2004-12-04 2:35 ` Jason Opperisano 2004-12-04 3:03 ` Helge Weissig 2004-12-02 4:03 ` John A. Sullivan III 2004-12-04 17:07 ` Helge Weissig
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.